작성자: yagur Rev : 2
Around Object Oriented Software - 1
1. 객체
내 생각은 추상의 세계에서 오고 내가 하는 말은 연관성의 세계로부터 오기 때문에 나는 오류를 범하지 않고는 결코 얘기를 할 수 가 없다.
- 칼릴 지브란
근 십수년간 Object Oriented Programming의 패러다임은 바이러스와 같이 퍼져나갔다. 그리스 철학자 플라톤의 이데아론의 영향을 받은 패러다임은 사람들의 입담과 종이위의 글, 또는 소프트웨어의 코드란 실체 통해 그 철학을 전염시켜 나갔다. 그리고 지금 그것의 위치는 가장 널리 보급된 패러다임이 되었다.
현실 세계에 존재하는것은 객체Class의 개체Instance일 뿐이다. - 플라톤
재미있는 글귀이다. 객체 지향 프로그래밍을 하던 사람에게 매우 친숙한 단어들이 보인다. 객체Class 그리고 인스턴스Instance가 바로 그것들이다. 칼릴의 격언처럼 우린 생각 영역에 있는 추상의 것들을 프로그래밍의 객체Class로 정의해 코드란 것으로 개체화Instantiation시킨다. 그리고 우리는 코드로 개체화된 컴퓨터 언어 영역의 객체를 메모리의 세계에 개체화 한다.
카릴의 격언중 '말'이란 부분을 컴퓨터 언어(C++, Java등)로 해석하면 꾀 그럴사 하다. 우리가 객체 지향 프로그래밍을 하며 가장 많이 하는 것이 무엇이 있을까? 바로 연관 관계를 디자인하거나, 그것들을 프로그램으로 실체화 하는 것이다. 이 연관 관계를 구체화한것들은 OOP에 매우 친숙한 객체 관계Class Relationship들이다.
연관 관계를 위와 같은 모델링 언어로 표현하기도 한다. 상속Inheritance, 합성Composition, 집합Aggregation, 연관Assocation, 위임Delegation등의 관계는 경험자에게 친숙한 관계들일것이다. '직선과 화살표 그리고 << >>의 스테레오 타입'으로 표기한것은 '결합관계를 스테레오 타입'으로 나타내는 방언으로 봐도 무방하다.
우리가 실체화한 객체는 추상의 세계로부터 나왔다. 그리고 추상적 개념을 띄고 소프트웨어의 내부 구성원인 객체로서 우리의 창조물이 된다. 우리가 말(Computer Language)을 할때 추상적인 것들 사이의 연관 관계를 정의함으로서 우린 오류를 범할수 밖에 없다. 하지만 연관성의 오류가 소프트웨어의 동작을 멈추게 하는것은 아니며, 소프트웨어에 나쁜 냄새(Refactoring의 냄새 혹은 OOD의 나쁜 설계)를 풍기게 할뿐이다.
우린가 무엇으로 객체를 식별하는지, 그 기준을 생각해 보는것도 나쁘지 않다.
Plato and cats
우린 무엇으로 위의 그림에 보이는 개체들을 고양이라고 구분짖고 있는것일까. 우리가 보고있는것들은 나이가 다르고, 생명체가 아닐수도 있고, 신체 특징도 다르며, 추상적이거나, 심지어 그저 모형이기도 하다. 하지만 우리는 고양이라고 저들을 구분 짖는다.
우린 고양이란 개개의 개체Instance들의 특성을 종합하고, 그것들을 일반화해 '보편적인 고양이'라고 인식하고있다. 즉 이 '고양이'란 단어는 공간과 시간의 영향을 받는것이 아닌, 추상적인 개념으로서 객체Class 혹은 플라톤의 이데아現象인 것이다.
소프트웨어는 객체를 컴퓨터 언어로 표현해야 하기 때문에 좀더 구체적이 되어야 한다. 행위와 속성을 정의해야하며 그것을 구체화해야한다. 객체의 멤버들은 선언시 실체가 없는 추상적 멤버가 될수 있다. OOP에서 추상 멤버Abstract Member를 지닌 객체를 추상 객체Abstract Class라 부르며, 순수 추상 객체Pure abstract class는 인터페이스Interface라 부르기도 한다.
윗 단락에서 굉장히 많이 언급된 '추상'이란 단어가 있다. 이는 OOP를 하기 위해 상당히 중요한 개념이며 다형성Polymorphism과도 맞물려 있다.
우린 무엇으로 위의 그림에 보이는 개체들을 고양이라고 구분짖고 있는것일까. 우리가 보고있는것들은 나이가 다르고, 생명체가 아닐수도 있고, 신체 특징도 다르며, 추상적이거나, 심지어 그저 모형이기도 하다. 하지만 우리는 고양이라고 저들을 구분 짖는다.
우린 고양이란 개개의 개체Instance들의 특성을 종합하고, 그것들을 일반화해 '보편적인 고양이'라고 인식하고있다. 즉 이 '고양이'란 단어는 공간과 시간의 영향을 받는것이 아닌, 추상적인 개념으로서 객체Class 혹은 플라톤의 이데아現象인 것이다.
소프트웨어는 객체를 컴퓨터 언어로 표현해야 하기 때문에 좀더 구체적이 되어야 한다. 행위와 속성을 정의해야하며 그것을 구체화해야한다. 객체의 멤버들은 선언시 실체가 없는 추상적 멤버가 될수 있다. OOP에서 추상 멤버Abstract Member를 지닌 객체를 추상 객체Abstract Class라 부르며, 순수 추상 객체Pure abstract class는 인터페이스Interface라 부르기도 한다.
윗 단락에서 굉장히 많이 언급된 '추상'이란 단어가 있다. 이는 OOP를 하기 위해 상당히 중요한 개념이며 다형성Polymorphism과도 맞물려 있다.
'개발 > 수필' 카테고리의 다른 글
| 객체 지향 소프트웨어 일주 - 2 (2) | 2008/03/15 |
|---|---|
| 테스트와 장인 - 7 (0) | 2008/03/12 |
| 객체 지향 소프트웨어 일주 - 1 (0) | 2008/03/11 |
| 테스트와 장인 - 6 (2) | 2008/02/25 |
| 테스트와 장인 - 5 (0) | 2008/02/22 |
| 테스트와 장인 - 4 (2) | 2008/02/21 |





Recent Comment