본문 바로가기

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

객체지향의 탄생-메소드

문득 CSI 요원들의 섬세한 관찰력과 증거로부터 단서를 추출하는 능력을 생각했다. 그들은 객체지향 전문가가 되더라도 훌륭한 설계자, 개발자가 되었을 것이 분명하다.

 

CSI 요원이 발품팔고 깊이있게 관찰하여 얻은 소중한 증거물들은 범죄를 해결하기 위한 중요한 '속성'들이다. 그러나 속성만 확보만 해서는 수사의 아무런 진전이 없다. 증거물(속성)로부터 범죄와 관련된 데이터를 추출해야한다. 데이터를 추출하는 '방법'을 알아야 한다.

 

CSI 에서는 요원들이 채취한 증거물을 분석하기 위한 다양한 첨단장비들이 등장한다. 지문 분석기, DNA 분석기, 범죄 현장을 3차원으로 재구성하여 시뮬레이션 하는 소프트웨어도 있다. 이 첨단장비들은 모두 채취한 증거를 분석하기 위한 '방법' 들이다.

 

어느 객체든 어느 일이든 그 대상의 속성만 알아서는 다음일로 진행이 되질 않는다. 그 속성을 이용하고 활용할 다양한 '방법'들을 정의하고 개발해야 한다.

 

수필가도 특유의 섬세하고 감성적인 오감으로 사물을 본후 자기만의 철학으로 해석한다. 수필가가 머릿속에 받아들인 그 사물의 느낌은 아직 '속성' 으로만 보관되고 있다. 이제 수필가는 속성을 어떤 '방법'으로 풀어쓰고 묘사할지 고민한다. 수필가가 쉽게 풀어 쓰든 머리를 벽에 찧는 고통을 겪고 문장으로 쓰던 어떤 방법으로든 문장으로 쓰면 그때서야 수필가의 작업이 완성된다.

 

세상을 분석하고 나누는 방법은 수만가지가 있다. 그 중에 우리는 세상을 객체지향적으로 이해하기로 했고, 객체지향에서는 하나의 객체를 속성과 방법으로 나눈다. 위의 예는 세상에서 벌어지는 일들을 객체지향적으로 속성과 방법으로 나누는 경우로 묘사했다.

 

세상의 어떤일이든 객체지향적으로 설명이 가능하다는 것을 알게되었다. 객체지향은 세상을 동일하게 그리는 방법 중 하나이기 때문이다.

 

 

메소드는 행동이라고 표현하고 기능이라고도 표현한다. 방법이라고 표현한다. 메소드의 의미는 객체가 다른 객체에게 제공하는 '기능'의 의미에 가깝다고 생각했다. 그래서 다른 객체에게 제공하는 '기능'으로 정의하는 것이 더 좋을 것 같다고 생각했다.

 

메소드는 객체 고유의 기능 또는 행동을 정의 할 수 있는 단어로 드러내고, 그 기능과 행동을 코드로 구현한 결과물이다. 자동차의 속도증가를 메소드로 정의하면 먼저 메소드를 '엑셀레이터'로 정의하고, 그 구체적인 로직을 개발자가 메소드 안에 구현한다.

 

세상의 사물을 다른 두가지 부류로 나누면 보호하는 사물과 보호받는 사물로 나눈다. 박물관에 몇천년된 귀중한 문화유산은 보호받는 사물이고, 그 문화유산을 보호하는 유리벽은 보호하는 사물이다. 만약 관람객들이 보호받는 문화유산을 보고 싶어할때면 꼭 유리벽을 통해 약간의 제약을 받으면서 관람을 하게 된다. 유리벽 같은 보호하는 존재가 있어서 그 문화유산은 완벽하게 보존되고 관람객도 질서정연하게 관람을 하게 된다. 유리벽은 없어서는 안될 존재이다.

 

유리벽이 하는 역할은 두가지다. 문화유산을 외부로부터 완벽하게 보호하는 역할, 그리고 외부에게 문화유산의 가치를 안전하게 제공하는 역할이다.

 

메소드는 객체의 속성을 변경하는 통로이다. 객체지향의 효과를 얻고 객체지향의 관례를 따르면 속성은 외부로부터의 접근이 차단되어 있고 메소드를 통해서만 접근이 가능해야 한다. 이 관례를 캡슐화의원칙이라고 한다. 그래서 메소드는 객체의 속성을 변경하는 통로역할도 한다.

 

만약 자동차의 속도를 증감 해야 하는데, 자동차 부품에 무리를 주지 않고 증감하려면 꼭 '속도 증감 제어 장치 메소드'를 통하게끔 구현이 되어 있다. '속도 증감 제어 장치'에는 자동차 객체의 속도를 객체 설계자 의도대로 변경하는 로직이 구현 되어 있다. 자동차의 속도라는 속성은 오직 '속도 증감 제어 장치' 메소드에 의해서만 통제된다. 그래서 자동차 객체의 무결성, 안전성을 자동차 객체 사용자에게 보장할 수 있다.

 

메소드는 다른 객체와 상호작용하는 통로이다. 객체지향 세계는 객체와 객체간의 관계를 정의하고, 객체들끼리 주고 받는 메시지로 프로그램이 작동되고 결과물이 완성된다. 객체들끼리 메시지를 주고 받는 통로가 메소드이다. 메소드를 통해 객체들끼리 상호 작용한다.

 

객체의 속성이 은밀하고 수동적이라면 메소드는 적극적이고 능동적이다. 다른 객체에게 '내가 제시한 기능을 쓰시오'라고 드러내놓고 노출하기 때문에 적극적이고, 객체들끼리 메시지를 주고 받으면서 자신이 속하는 프로그램의 결과물을 좌지우지하기 때문에 능동적이다.

 

객체의 메소드를 찾고 구현하는 일은 역시 객체 안에 숨겨진 고유 기능과 행동을 찾아내는 일이기 때문에, 그 객체에 대해 잘 알고 있어야 한다. 그리고 그 객체의 중요하고 핵심적인 기능과 행동만 밖으로 추출할 수 있어야 한다. 객체의 속성을 마치 귀중한 문화유산 보물처럼 잘 보존해야 한다.

 

그래서 메소드를 찾아내고 구현하는 일은 객체를 잘 '관찰' 하고 객체의 주요 기능과 행동을 밖으로 '추상화' 하는 사고 능력이 요구된다.

 

"메소드는 행동이라고 표현하고 기능이라고도 표현한다. 방법이라고 표현한다.

메소드는 객체 고유의 기능 또는 행동을 정의 할 수 있는 단어로 드러내고, 그 기능과 행동을 코드로 구현한 결과물이다.

메소드는 객체의 속성을 변경하는 통로이다.

메소드는 다른 객체와 상호작용하는 통로이다."

 

 

 

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