본문 바로가기

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

객체지향의 탄생-생각의 탄생

 

기본

  1. 객체지향의 탄생
    1. 생각의 탄생

프로그래밍은 머리를 굴리는 작업이다. 머리를 굴린다는 것은 생각을 한다는 것이다. 생각을 잘하려면 사고력이 필요하다.

 

생각의 종류는 어떤 것들이 있을까, 생각을 잘하는 방법은 어떤 것들이 있을까. 나는 어렴풋이 궁금증을 갖기도 했다. 굳이 자세하게 따져보지는 않았다. 나는 철학자처럼 깊이있는 고민을 하지는 못했다.

 

프로그램 개발자로 생각의 근육을 사용해 지식 노동을 하지만, 깊이 있는 고민을 많이 해보지 않은 게으른 나를 위해 생각의 탄생이란 책이 출판된적이 있다.

 

생각의 탄생은 문명이 발달하면서 인류의 사고가 어떻게 사용되고 발전되었는지 생각의 종류를 13개로 분류하여 각 생각의 영역마다 위인들의 사례를 들고 실예를 설명한다.

 

관찰, 형상화, 추상화, 패턴인식, 패턴형성, 유추, 몸으로 생각하기, 감정이입, 차원적 사고, 모형 만들기, 놀이, 변형, 통합생각의 13가지 유형

 

나는 박사도 아니고 당시 고참 개발자도 아니지만 객체지향에 대해 깊이있게 따져보면서 머리에 김이 나기 시작했다. 보통은 딱 떨어지는 IT 기술들인데 객체지향은 100분 토론의 주제처럼, 시를 짓는것 처럼 답이 정해져 있지 않고 두루뭉실하고 눈 앞의 물건처럼 손에 잡히지 않았다.

 

객체지향에 대해 고뇌하던 때 이 책을 읽게 되었다. 머릿속에 객체지향에 대한 생각으로 가득차 있을때 인간이 어떤 방식으로 사고하는지 알려주는 책을 읽었다. 자연스럽게 객체지향적인 사고에서 쓰이는 생각의 종류를 염두하며 읽었다.

 

첫번째는 관찰이다. 객체지향에서 쓰이는 생각의 종류 첫번째는 관찰이다. 모든 지식은 관찰에서 시작한다. 관찰은 사물이나 현상을 주의하여 자세히 살펴보는 것이다. 관찰은 수동적인 보기가 아니라 적극적인 관찰이 되야 한다. 음악은 우리에게 '그냥 듣는 것'과 '주의 깊게 드는 것'을 구분하도록 한다. 고 어느 작곡가가 얘기 했다. 관찰은 수동적으로 보는 행위와 다르다.

 

마치 화가가 세상의 사물을 그림으로 그리듯이 객체지향에서 세상의 사물을 객체로 만드려면 사물을 적극적으로 관찰해야 한다. 모든 종류의 감각정보를 활용하여 모든 사물에 깃들어 있는 놀랍고도 의미심장한 내면의 속성과 메소드를 감지해야 한다.

 

두번째는 추상화이다. 객체지향에서 쓰이는 생각의 종류 두번째는 추상화이다. '나는 내가 관찰하고 생각한 중에서 가장 중요한 가지 요소를 제외하고는 모두 버렸다.' 라고 어느 과학자가 얘기했다. 추상이란 어떤 대상의 전체를 재현하는 것이 아니라 눈에 띄는 한두 개의 특성만을 나타내는 것이다.

 

과학자, 화가, 시인들은 모두 복잡한 체계에서 '하나만 제외하고' 모든 변수를 제거하여 핵심적 의미를 발견하려고 애쓴다. 진정한 의미에서 추상화란 현실에서 출발하되, 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정이다. 추상화의 본질은 가지 특징만 잡아내는 것이다. 추상화는 단순화이다.

 

객체지향에서 사물을 관찰하여 사물의 핵심적인 특징을 속성이나 메소드로 추출하는 것이 추상화 사고의 하나의 과정이다. 나아가 객체간의 관계에서 공통적으로 쓰일 속성과 메소드를 발견하면 수퍼 클래스로 추상화 한다. 수퍼 클래스와 인터페이스를 정리하려다 보면 저절로 추상화란 사고 과정을 거친다. 추상화란 사고 과정을 객체지향에 활용 하면 간결하게 정리된 시처럼, 우아하게 빚어낸 도자기처럼, 간결하고 우아한 객체와 객체간의 관계를 만들어 낸다.

 

세번째는 패턴인식이다. 객체지향에서 쓰이는 생각의 종류 세번째는 패턴인식이다.

 

'작곡가들은 왼쪽에서 오른쪽으로 읽어나가는 음의 순서보다 음표들 사이의 관계에 관심이 많다.'

 

'가장 중요한 것은 특정한 조각 하나가 아니라 전체 그림을 가늠할 있을 만큼의 충분한 조각들과 그것들 사이의 연관성을 찾아내는 것이다.'

 

'벽의 복잡한 문양 속에서 형상들을 발견하는 것은 시끄러운 종소리 속에서 우리가 아는 이름이나 단어를 찾아내는 일과 같다.'

 

패턴을 알아낸다는 것은 다음에 무슨 일이 일어날지 예상하는 것이다. 우리는 패턴에서 지각과 행위의 일반 원칙을 이끌어 내어 예상의 근거로 삼는다. 그런 다음 새로운 관찰결과와 경험을 예상의 안에 끼어넣는다. 관찰과 경험의 틀을 흔드는 무엇인가가 일어나게 우리는 다른 패턴을 만들어내며, 새로운 발견은 이런 순간에 이루어진다. (생각의 탄생 177페이지 패턴인식편)

 

객체지향에서 패턴을 알아낸다는 것은 패턴 창시자가, 객체지향 개발자들이 설계와 개발중에 무슨 일이 일어날지 예상하는 것이다. 패턴 창시자는 개발중에 발견되는 일반 원칙을 이끌어 내어 예상의 근거로 삼는다. 그런 다음 새로운 관찰결과와 경험을 예상의 안에 끼어넣는다. 이렇게 디자인 패턴이 생긴다. 관찰과 경험의 틀을 흔드는 무잇언가가 일어나게 새로운 객체지향 고수는 다른 패턴을 만들어내며, 새로운 발견은 이런 순간에 이루어진다.

 

객체지향 개발을 좋아하고, 글쓰기를 좋아했지만 많지는 않은 나이, 인문학적 지식이란 내공이 부족한 나에게 '생각의 탄생 ', 객체지향에 대한 책을 쓰기 위해 노력하는 생각을 빠르게 움직여주는 자전거와 같았다.

 

 

[사물을 관찰한다. 속성, 메소드를 담은 객체 객체간의 관계로 추상화한다. 반복되는 좋은 솔루션을 패턴인식한다.]


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