본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생-객체

 

  1. 객체지향의 기본 요소

객체지향에도 여러 요소들이 있다. 객체지향의 요소들은 마치 생물처럼 전체를 구성하고 있는 각 부분이 서로 가깝고도 깊게 관련을 맺고있다. 그래서 떼어내서 생각하지 말고 연관지어 생각하는 것이 좋다. 나는 객체지향의 각 요소를 자연의 숲과 나무에 비교하기로 했다.

 

우리는 객체지향 휴양림을 보고 있다. 객체지향 휴양림의 가장 큰 요소는 숲이다. 숲은 어플리케이션과 같다. 어플리케이션 숲안에는 다양한 나무들이 있다. 나무들은 숲을 이루는 가장 기본적인 요소이기 때문에 마치 객체와 같다.

 

자연이 성장하는데 가장 중요한 요소중 두어가지는 그 지역이 낮은 해충과 높은 영양을 갖춰야 하는 것이다. 객체지향 휴양림이 있는 지역은 다른 휴양림보다 낮은 해충과 높은 영양으로 유명한 땅이었다. 소프트웨어 공학에서 제일 으뜸으로 치는 소프트웨어 평가 방식은 낮은 결합도와 높은 응집도이다. 그래서 낮은 해충은 낮은 결합도와 같고 높은 영양은 높은 응집도와 같다. 객체지향 휴양림은 낮은 결합도와 높은 응집도로 유명하다.

 

객체지향 휴양림이 있는 땅은 객체지향 그 자체이다. 클래스는 마치 붕어빵 틀처럼 객체를 찍어내기 위한 틀과 같다. 명세서와 같다. 자연과 비교하면 식물이 자라기 전 씨앗과 같다. 이곳에 클래스 씨앗을 땅에 심는다. 객체지향에서 객체는 생성자 통해 생성 되곤 하는데, 씨앗 또한 생성자 통해 발아되어 하나의 객체가 되었다.

 

객체 나무가 커서 나무의 형태가 갖춰졌다. 나무의 각 요소를 보기 시작했다. 속성은 객체가 존재하는 이유다. 객체의 고유한 특성과 같다. 속성은 나무의 줄기와 같다. 속성은 나무를 지탱하고 나무의 존재를 세상에 알리는 나무의 중심이다. 메소드는 객체를 사용하는 이유가 된다. 다른 객체들이 이 객체의 메소드를 알기 때문에 메소드를 통해 그 객체의 기능을 쓴다. 그래서 메소드는 나무의 가지와 잎과 꽃과 열매와 같다. 울창한 가지와 잎 또는 열매로 나무 자신과 그 지역과 더 나아가 지구와 생물을 지켜주면서 자신의 존재를 뽐낸다.

 

이 나무들이 모이고 커져서 모든 생물을 이롭게 하는 우람하고 아름다운 숲이 될 것이다. 우람하고 아름다운 숲은 마치 좋은 어플리케이션과 같아서 세상을 이롭게 할것이다.

 

객체는 나무와 같아야 하고 어플리케이션은 숲과 같아야 한다.

 

 

  1. 객체(Object)

객체지향이라는 단어는 낯설다. IT용어를 순우리말로 정의하긴 어렵다 하더라도 객체지향이라는 용어는 난해한 한자어의 조합이라는 느낌이다. 몸에 어울리지 않는 군복을 억지로 입는 느낌이다.

 

그러나 우리는 맞지 않는 군복이라도 꼭 입고 복무해야하는 군인처럼 객체지향 개발을 해야 한다. 차라리 군인은 안되면 몸으로 때울수나 있지 객체지향 개발을 잘하지 못하면 언젠가는 생계까지 영향을 미친다.

 

객체지향이라는 용어가 일본의 기술서적을 번역하다보니 유래되었다는 설~ 도 들었다. 조금 더 좋은 용어도 있을텐대 객체지향이라는 용어 때문에 나는 초보운전자가 차선변경하는 일처럼 객체지향 배우기를 어려워했고 두려워했다.

 

객체란 단어가 주범이다. 객체지향이란 용어를 어렵게 느끼는 주범이 객체란 단어이다. 객체지향 개발이 두려우면서 어려워 보이는 기술이 된 이유중에 하나는 객체란 단어부터 낯설기 때문일 것이다. 객체라는 단어를 여러 번 음미해 보았다. 어떻게 하나의 구절로 담을까 고민했다. 답은 객체를self-contained(필요한 것들을 모두 담은 것) 이라고 정의하는 것이다.

 

소프트웨어를 구현하고 동작시킬 수 있는 컴포넌트로서 필요한 것은 코드와 데이터이다. 객체는 이 두가지 요소를 다 갖추었다. 그래서 객체는 필요한 것들을 모두 다룬 최소한의 독립적인 단위로 정의 할 수 있다.

 

계속 객체란 단어를 음미하면 Object란 단어에서 개별적, 독립적이라는 의미가 스며들어 있다. 객체지향 개발에서 추구하는 철학인 '느슨한 결합(loosely coupled)'을 잘 드러내는 표현이다.

 

그래서 객체란,

- 필요한 것들을 모두 다룬 최소한의 독립적인 단위면서,

-독립적인 단위 객체부터 객체지향의 중요한 철학인 느슨한 결합을 잘 드러내는 개념이다.

 

나는 객체의 정의를 사전적인 뜻으로부터 알아가기 시작했다. 객체의 사전적인 뜻은 '실체로 존재하는 대상 또는 개념'이다. 이 뜻을 우리 사람사는 세상에서는 어떻게 표현하면 되는지 불러보았다. 저 사람~, 저 사물~, 저 물건~, 저 동물~, 저 것은~, 그것은~, 이것은~ 으로 불리는 것 같다. 그러고보니 저 사람, 사물, 물건, 동물, 그것은, 이것은 등을 하나로 통합하여 사람 입에 불리어지는 단어는 없는 것 같다. 그냥 저 사람이고 저 물건으로 불리어질 뿐이다.

 

'실체로 존재하는 대상 또는 개념'이라고 정의되는 대상을 우리는 저 사람~ 저 물건~하며 친숙하게 부르지만 다만 하나로 통합하여 부르지는 않는다. 그러나 좀더 명확한 정의가 필요한 기술 영역에서는 저 단어들을 하나로 묶을 필요가 있다. 저 단어들을 하나의 단어로 묶어서 불러보려고 하니 그 단어명을 '객체(Object)'로 정의했다.

 

그래서 객체는 '실체로 존재하는 대상 또는 개념' 이라고 하며 저 사람~, 저 사물~. 저 물건~. 저 동물~, 저 것은~, 그것은~, 이것은~ 으로 불리는 모든 '것' 들이다.

 

객체에 대해 좀더 공부해보니 클래스라는 비슷한 개념도 나오고, 고유명사, 일반명사라는 국어시간에 배울법한 개념도 나왔다. 객체는 고유명사이다. 고유명사란 서울, 부산, 대전, 이효리, 김태희, 63빌딩 같이 유일하며 고유한 존재에 붙여진 명사이다.

 

고유명사가 아닌 일반 명사는 객체가 아닌가 생각해 보았다. 도시, 연예인, 건물 같이 비슷한 특성을 하나로 묶어 볼리는 일반 명사는 객체(Object)가 아니라 클래스 이다.

 

그래서 다시 정의하면,

"객체란 필요한 것들을 모두 다룬 최소한의 독립적인 단위면서 그 독립적인 단위 객체부터 객체지향의 중요한 철학인 느슨한 결합을 잘 드러내는 개념이다. 객체란 우리가 저 사람~, 저 사물~, 저 물건~, 저 동물~, 저 것은~, 그것은~, 이것은~ 으로 불리는 모든 것이되 다만 그 대상은 이 세상에 유일하게 존재하는 것들이다. 객체란 실체로 존재하는 대상 또는 개념이며 고유명사이다.

 

객체는 세상에 유일하게 존재하는 모든 사물을 다루기 위해 필요한 것들을 데이터와 코드로 모두 갖춘 최소한의 독립적인 단위이다. 객체는 세상에 유일하게 존재하는 모든 것들이다. "

 

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.