본문 바로가기

기타/객체지향 토막글

수필 객체지향, 클래스(Class)

클래스(Class)는 일반명사이다. 일반명사는 저 사람~ 저 물건~ 처럼 유일한 사물을 가르키는 단어가 아니다. 사람, 나라, 자동차, 컴퓨터처럼 사물을 공통적으로 부를 수 있는 단어로 묶은 것이다, 예를 들어 맥북, 센스, X노트 등으로 불리는 고유명사인 사물은 노트북이란 일반명사로 묶어서 부른다.

노트북, 휴대폰, 자동차처럼~ 우리가 부르는 일반명사는 명확하게 어느 사물을 가리켜 부르는 것이 아니고 뭉뚱그려 부르기 때문에 그 실체가 애매모호하다. 일반명사는 명확하게 가리키며 부를 수 있는 눈앞에 존재하는 사물이 아니며 우리 인간의 사고과정을 통해 한단계 추상화시킨 존재이다.

그래서 클래스는 아직 사람 머릿속에 존재하는 개념이고 아직 객체로 생성하여 세상에 나온 개념은 아니다. 객체지향 언어인 자바로 프로그래밍할때도 마찬가지이다. 우리가 객체 선언할때

Notebook macbook =  new Notebook();

이라고 선언하는데 여기서 Notebook은 아직 세상에 나온 객체가 아닌 일반명사로 존재하는 클래스이고 new Notebook()을 통해 macbook 이 생성되었을 때 비로소 macbook이라는 유일한 고유명사 객체로 활약한다.

문득 햇갈리기 시작했다. 객체와 클래스의 본질적인 차이를 생각하다보니 생각하지 못한점이 발견됐다.
 
[전형적인 상속 구성도]

예전에 종종 위와 같은 클래스 다이어그램을 그려놓고 객체지향 설계에 대해 생각한 적이 있다. 그런데 위와 같은 클래스 다이어그램은 내가 이해하고 설명한 지금까지의 내용을 어긴 그림이 된다. 휴대폰이 추상적인 개념인 클래스이고 블랙잭, 아이폰, 햅틱이 좀더 구체적인 고유명사 객체일 것인데, 저 그림은 객체 선언할때 변수명으로 선언해야할 고유명사 블랙잭, 아이폰, 햅틱 등도 클래스로 정의한것이 되어버렸다.

하지만 좀더 생각해보니 무엇을 잘 못 생각했는지 알 수 있었다. 블랙잭, 아이폰, 햅틱은 휴대폰중 유일한 대상을 지칭한 고유명사인것처럼 보이지만 사실은 블랙잭등도 휴대폰으로부터 좀더 구체화된 일반명사였다는 것이다.

Handphone blackjack1 =  new Blackjack();

위처럼 진정한 고유명사는 ‘블랙잭 시리얼번호 #1’여야 한다. 그야말로 세상에 유일한 하나의 존재가 객체인것이다.

그래서 클래스는 일반명사이고 객체는 고유명사이다. 클래스(Class)는 우리 인간의 사고과정을 통해 한단계 추상화시킨 일반명사이고, 객체(Object)는 세상에 유일하게 존재하는 모든 고유명사이다.


산골이 덧) 이 글은 수필 객체지향이라는 책쓰기용 원고의 일부라서 펌은 불허합니다. 이 글의 원고는 1차로 쓴것을 그대로 올려서 다듬어지지 않았습니다. 못써도 이해해주시고요. 지금 올리는 것은 공부한것을 독자와 공유하고 객체지향 개발자님의 조언을 받기 위해서입니다. 혹시 내공이 부족해서 미흡한 내용이 있을것 같습니다. 그래서 혹시 시간되시면 조언 부탁드립니다. ^ ^; 그리고 관심있는 출판사 관계자분의 연락도 환영합니다. I출판사만 믿습니다. ^ ^;