본문 바로가기

Robotics/Software Tech.

개발자를 위한 객체지향 패러다임


제 하드디스크에서 자고 있던 자료입니다.
본 글의 출처는 모르겠습니다. 아시는 분은 댓글을 남겨주시면 감사하겠습니다.
전체적으로 글이 길기때문에 나눠서 올리겠습니다.
--------------------------------------------------------------------------

1. Object의 기본 개념

Object는 데이타와 이와 관련된 procedure를 한데 묶어 표현한 소프트웨어 패키지이다. 이는 현실세계가 처리중심이 아닌 사물(객체 : Object)중심으로 이루어졌다는 데에 바탕을 둔 것이다. 세포(cell)를 예로 들어 생각해 보자. 세포는 핵, 키토콘드리아, 세포질, 세포막 등으로 이루어 졌는데, 이러한 세포의 구성 요소들에게는 각각의 역활이 주어져 있다. 그러나 다른 기관의 입장에서 살펴보자. 세포의 구성 요소들이 어떠한 일들을 하는지는 그다지 중요한 사실이 아니다. 단지 단백질이나 무기질을 세포내로 전달해 주면, 세포는 그것들을 가지고 자신의 임무만을 수행하면 되는 것이다. 세포내에 어떠한 구성원들이 있는지는 알 필요도 없고, 단지 세포 그 자체로서만 인식되면 충분한 것이다. Object도 이와 마찬가지로 생각하면 쉽게 이해가 갈 것이다.


2. Object(객체)의 기본 정의

객체란 실세계에 존재하는 사물의 정적인 상태나 명칭으로서 일반적으로 인간이 인식할 수 있는 사물의 이름이나 감식할 수 없는 형태의 추상적 사물을 포괄하는 개념적 용어이다.


3. 객체와 모듈화(Object & Modularity)

객체라는 프로그램 개념의 백그라운드를 이루는 개념은 모듈화(Modularity)이다. C 프로그램의 크기가 커지면 작성된 프로그램을 해석하기가 어렵게 되어 모듈화가 필요하다. C++로 작성한 프로그램에서 객체는 일종의 구조체로서 데이타와 함수를 묶어 준다. C++ 에서는 데이타와 데이타를 처리하는 함수를 객체라는 “단일 개념적 단위”로서 묶어서 프로그램이라는 군을 구성하는 하나의 개체로서 간주한다. 내부적으로 처리되는 메카니즘은 알 필요가 없다. 다만 그 객체가 무엇을 하는것인가를 알아야 한다.

프로그램의 크기가 커지면 프로그램을 이루는 함수들이나 데이타 구조는 비효과적이고 비논리적으로 얽혀있게 된다. 프로그램 코드는 체계적으로 통제되고 정련화되어야 한다. 그래야 프로그램을 수정하여 쉽게 버전업할 수 있고 프로그램 코드의 일부를 다른 프로젝트에서 재사용하고자 할 때 편리하다.


4. Abstract Data Type & Data Abstraction

기존의 data type을 이용(조합)하여 프로그래머가 정의한 새로운 data type을 Abstract data tpye이라고 하며, 이러한 방법을 Data Abstraction(데이타 추상화)이라한다. 이때 일반적으로 새로운 데이타와 그 데이터에 대한 연산까지 같이 정의한다. 이렇게 함으로써 사람의 생각을 한단계 높여, 구체적인 low-level(primitive) data와 연산이 아닌, 추상화된 data와 연산을 다룰 수 있게 된다. 이 data abstraction은 복잡한 데이타(complex data)를 다룰때에 효과적이다. 실제로 "Program = level of abstraction"이라는 관점도 있다.


5. Encapsulation( 캡슐화 )

Data Abstraction의 기술적인 방법을 Encapsulation이라고 한다. 필요한데이타와 procesure를 모아 캡술에 담는 것에 착안하여 이렇게 이름을 붙인 것이다. 실제로 이 encapsulation으로 인해 생겨난 결과가 object이다. 예를들면, nucleus(핵), mitochondria(미토콘드리아), membrane(세포막)등의 변수들과 그와 관계된 함수들을 cell(세포)이란 object내에 정의해 놓은 것이다. 이렇게 함으로써 우리들은 자세한 부분까지 신경을 쓸 필요가 없고 단지 세포라는 object만을 생각하면 된다.


6. Infomation Hiding (정보 은닉)

Encapsulation으로 인해 내부의 데이타는 외부로 부터 고립되었다. 데이타는 필요한 때에 단지 외부로부터의 message에 의해서만 접근되어질 수 있는데, 이러한 것을 Information Hiding(정보 은닉)이라 한다. 만약 Object내의 일부분을 수정하였다고 해도 그 변화는 단지 Object내에서만 영향을 끼치고, 이로 인하여 완전히 모듈화가 이루어지는 것이다.


7.캡슐화와 정보 은폐(정보 은닉)

데이타와 그 데이타에 적용 가능한 연산들은 통합되어 하나의 단위 즉, 객체로서 표현되며, 이는 객체 중심 모델의 기본 구성 요소가 된다. 이때 구현과 관계되는 모든 정보는 외부로부터 숨겨지며(hidden), 단지 인터페이스 부분만이 외부에 공개 된다. 이는 추상적 데이타 타입(abstract data type)을 제공함으로써 지원될 수 있다. 은닉화의 개념은 정보 은폐(information hiding)의 기능을 부여하여 정보의 이용 권한(authorization) 문제나 정보 보호(protection) 문제를 해결할 수 있는 방법을 제시해 줄 수 있다.


8. Composite Object (합성 객체)

일반적인 의미에서 객체에 객체를 포함한다는 뜻. 한 Object가 다른 Object를 포함할 수 있는데 이를 composite object한다. 이렇게 함으로써 포함된 object를 새로운 Object의 한 부분으로 단순화시킬 수 있고, 그에 대한 자세한 내용을 알 필요도 없으며 많은 주의를 기울일 필요도 없이 사용할 수 있다.


9. 복합 객체 (complex object)

객체는 여러개의 상이한(다양한 기능을 갖는) 객체를 포함할 수 있다는 뜻. 객체 지향 개념에서는 이미 정의되어 존재하는 객체들이 다른 객체의 한 속성이 될 수 있도록 하여 복합 객체를 표현 하기가 용이하며, 이러한 복합 객체를 하나의 단위로 처리할 수 있으므로 멀티미디어 데이타를 포함하는 객체의 처리에 편리하게 사용될 수 있다.


10. 객체의 식별성 (object identity)

객체는 그 값에 독립적인 유일한 식별자를 할당 받는다. 따라서 두 객체의 값이 같은 경우와 실제로 동일한 객체의 경우를 다르게 처리할 수 있는 장점이 있다.


11.
타입과 클래스

각 객체는 객체 타입이나 클래스의 한 인스턴스로서 존재한다. 타입과 클래스에 대한 정확한 구분을 내리기는 힘들며, 대부분 이를 혼용하여 사용한다. 기존의 객체 지향 데이타베이스 시스템들은 이점에 대해 크게 두가지의 견해를 보이는데, 그 하나는 GEMSTONE, VISION, ORION 등과 같이 클래스 개념을 지원하는 것이고 다른 하나는 O2, VBASE, TRELLIS/OWL과 같이 타입 개념을 지원하는 것이다