만져보는 임베디드 시스템/아두이노 소프트웨어

아두이노 소프트웨어-ix. 객체지향

hanjinee 2020. 12. 31. 00:40

안녕하십니까 제타지니입니다.

오늘은 객체지향에 대해서 다루어 보고자 합니다. 

언어는 함수 중심의 절차적인 프로그래밍 언어입니다.

C++은 객체 중심의 객체지향 프로그래밍 언어입니다.

 

what the....  ...? 

이것은 무슨 소리....? 

도데체 객체지향이라 함은 무엇일까요?

 

객체 지향 - object oriented. 

사전에서의 뜻은 다음과 같습니다. 

객체(客體) - 작용의 대상이 되는 쪽, 

(손님 객 & 몸 체 ==> 객관적으로 존재하는 실체)

지향(指向) - 어떤 목표로 뜻이 쏠리어 향함. 또는 그 방향이나 그쪽으로 쏠리는 의지. 

(한자 뜻: 손가락이 가리키는 방향)

 

많은 분들이 여러가지 방법으로 객체 지향이라는 단어를 설명하고 있습니다만, 역시나 객체 지향이라는 개념을 이해하는 것은 쉽지 않습니다. 

나름 제가 이해한 방식대로 써보겠습니다!

객체 지향을 이해하기 위해서는 5가지 개념에 대한 이해가 필요합니다. 

클래스(Classes), 오브젝트(Objects), 캡슐화(Encapsulation), 상속성(Inheritance), 다형성(Polymorphism)

1. 클래스(Classes)

클래스를 이해하기 위해서는 '추상(Abstraction)'에 대한 개념 이해가 필요합니다. 

추상(Abstraction, 抽象)이란 뽑을 추, 코끼리 상 이라는 한자를 지니고 있습니다. 즉, 코끼리 상이라는 한자를 '모양'이라고 생각해 보신다면, '대상으로 부터 모양을 뽑아낸다' 즉, '대상에서 특징만을 뽑은 것' 이라고도 말씀드릴 수 있겠습니다. 이것이 언어적으로 들어가면, '특징에 대한 서술'이 되겠지요? 

클래스라 함은 표현 대상에 대한 '추상화'를 뜻합니다. 즉, 표현 대상의 상태를 저장하는 데 사용될 속성을 정의하는 것이지요. 여기서 추상화란 구체적으로 사용자가 구체적인 내용을 떠올리지 않더라도 사용할 수 있는 기능들입니다. 

클래스는 두 부분으로 나뉘는 데,  인터페이스Interface 구현Implementation입니다.

인터페이스란 부품들과의 약속입니다. 부품들과 서로를 연결 시켜주며, 연결 시키지 말아야 할 곳의 결합을 막기도 합니다. 

구현이란 자신만의 행위를 하기로 약속되어 있는데, 이것을 구현이라고 하지요. 

C/C++에서 쓰이는 추상화는 두 가지 종류가 있는데요, 그것은 다음과 같습니다. 

프로시져 추상화(Procedural Abstraction) - 함수

데이터 추상화(Data Abstraction) - 구조체, 배열, 포인터

 

2. 오브젝트(객체, Objects)

Objects = Class of Instance 

class 가 사례로 나타난 것이죠, 즉 추상화된 개념의 '실체'입니다. 

예시를 들어보자면~

<클래스>동물  <오브젝트> 기린, 치타, 호랑이

(클래스 <==공통 특징 서술), (오브젝트 <==실체, 존재, 고유성)

 

C언어에서 설명해보도록 하겠습니다!

모든 오브젝트는 다음과 같은 속성을 지닙니다. 

오브젝트 = 데이터 + 행위 + 아이덴티티 

1. 데이터를 가집니다. - 데이터는 객체의 상태를 기술합니다.

2. 위의 집합을 가집니다. - 이 행위들은 객체가 메시지를 받았을 때 어떤 행위를 취해야 하는 지 알려줍니다. 

3. 아이덴티티를 가집니다. - 다른 객체들과 구별되기 위해서 고유의 아이덴티티를 가집니다. 

 

오브젝트는 데이터와 데이터에 대한 조작을 묶은 것입니다. 

오브젝트의 모양이 클래스에 서술되어 있습니다. 

 

 

3. 캡슐화(Encapsulation)

캡슐화는 well-designed, 즉 잘 설계된 클래스를 만들 때 쓰이는 기법입니다. 요약해서 말씀드리자면, 캡슐화란 단단한 케이스 안에 내부 동작방법을 숨기고, 사용자에게는 그 사용방법만을 노출하는 방법을 말합니다. 마치 모니터와 컴퓨터 본체 같이, 연결만 하고 버튼만 누르면 우리 모두가 컴퓨터를 쓸 수 있잖아요? 비슷한 원리이죠. 조금 더 설명을 드리자면, '데이터 + 데이터에 대한 조작을 묶는 것'입니다.

 

4. 상속성(Inheritance)

하나의 클래스가 가지고 있는 특징들을 다른 클래스가 물려 받는 것 상속성이라고 합니다. 클래스들은 '가족 관계(family)'를 형성하고 있는데요, 새로운 종류의 서브클래스를 작성해도, 상위 클래스에 있는 기능들을 그대로 가지고 쓸 수 있지요. 상속성에서 가장 큰 장점은 바로 '계층 구조'인데요, 하나의 상위 클래스를 둔 여러개의 하위 클래스들을 작성해도 상위 클래스가 지닌 특징들을 물려 받아서 재사용성과 유연성을 지닌 다는 것이 특징이겠습니다. 

 

5. 다형성(Polymorphism)

다형성이란 한자 그대로 많은 형태를 지닌다는 특성입니다. 다형성은 캡슐화, 상속성과 함께 쓰여서 구조적인 흐름 제어를 단순화 해줍니다. 상속성의 특징을 따라서  클래스에 동일한 이름의 메소드를 사용할 수 있게 해주지요. 즉, 같은 명령을 다른 종류의 오브젝트에 줄 수 있다는 뜻이지요. 또한 같은 명령일 지라도 클래스에 따라서 반응이 다르다는 특성을 보이기 때문에, 하위클래스에 같은 명령을 보내도 다른 반응을 보이지요. 그렇기 때문에 이를 '다형성' 형태가 많은 특성이라고 하는 것입니다. 

 

 

이와 같은 5가지 특성을 보이면 '객체 지향' 즉, 객체 위주의 프로그래밍이라고 하지요. 이와 같은 특징을 보이는 것이 단연 'C++'입니다.

 

728x90