芝蘭之交

simp.egloos.com

포토로그



[객체지향] 객체지향 언어와 객체지향 프로그래밍

객체지향이란 개념이 세상에 나온지도 꽤나 시간이 지났다. 그렇지만 여태 짧지 않은 개발 커리어에서 객체지향적 프로그래밍을 하는 사람을 만난 것은 손에 꼽을 정도이다.

어쩌면 당연한 이야기 일 수밖에 없다. 국내 IT 환경이 전산전공자들위주로 돌아가는 곳도 아닌데다. 전산전공자라 할지라도 학교에서 객체지향 프로그래밍을 가르치지 않기 때문이다. 필자또한 학교에서 객체지향프로그래밍이란 제목의 수업을 들었으나 지금와서 생각해보면 그저 C++ 문법으로 구조적 프로그래밍만 하던 시절이었다. 그때에 가르치던 조교분도 객체지향에대해 깊은 생각을 하지 않았음에 틀림 없다.


Why !
왜 객체지향이 생겨나게되었을까? 우연히 생긴 것은 하나도 없다는 말이 있지 않은가. 객체지향이 태어나게 된 원인. 무엇인가를 해결하기 위한 답으로 태어났음이 당연하다. 1970년대 구조적 프로그래밍이 중원을 지배하고 있을 때였다. 프로젝트가 거대화되고 코드의 양이 많아지면서 문제들이 생겨나게 되었다.
- 데이터와 로직이 혼합이 되어 코드를 알아보고 힘들어 졌을 것이며
- 코드의 재사용이 심각할만큼 문제가 되었을 것이다.

물론 다른 문제들도 많았겠지만 이 두가지는 필자가 생각하기에 생산성 측면에서 가장 큰 문제였을 것이며, 그것을 해결 하기 위한 방법으로 객체지향 개념을 만들어 냈으리라 본다.


How !
어떻게 위의 문제를 풀었는지 살펴보자.
객체지향에선 객체라는 개념을 도입했다. 데이터와 그 데이터에 관련된 로직들을 하나의 클래스, 객체로 만들어서 엮으며, 프로그램의 기본 유닛으로 이용할 수 있게 된것이다.
또한 추상화와 상속을 이용해 코드의 재사용성을 현격히 (그 전에 비해 ) 높일 수 있는 방법을 제공했다.



객체지향이 위의 문제를 해결했다면 왜 우리가 객체지향 언어를 이용해 만든 프로그램에는 데이터와 로직이 분리가 안되고, 코드는 재사용하기가 힘들어 Copy & Paste 를 이용한 재사용을 할 수 있는지 심각한 고민을 해보아야 하지 않을까?

입사 초창기에 들었던 말들이 이런 것이다.
  "이 코드를 짜려면 이 클래스를 카피해와서 이부분을 남겨두고, 요기만 고치면 되"
라는 식의 인수인계였다.


C언어로 객체지향프로그래밍을 어느정도는 가능하다. 물론 매우 불편하고, 불만족 스럽겠지만 일단은 가능하다는 얘기다. 우리가 사용하는 자바라던가 C#이라던가 C++ 이라던가 하는 언어들은 객체지향언어라고 불린다. 객체지향프로그래밍을 하기 쉽게 설계되었고, 객체지향이란 것이 개념이었던 시절 많은 선배들의 노력으로 객체지향 개념 자체가 언어속으로 녹아든 것이다. 그저 감사할 따름이다.


프로그래밍을 할때에 객체 하나가 너무 욕심을 내지 않고, 한가지일만 잘하게 만들되 , 어떻게 바뀌더라도 다른 모듈에 영향을 주지 않는다면 훌륭한 객체가 된다. 물론 이런 객체가 외부로 자신을 표현하는 프로퍼티나 퍼블릭 메서드를 잘 뽑아 낼 능력이되고 인터페이스 지향적인 프로그램을 짤 수 있다면, 좀 더 낫겠지만 말이다.


객체지향 언어를 이용해 객체지향적인 프로그래밍을 한다는 것은 쉬운 일이 아니다. 알아야 되는것도 많고, 아무생각 없이 프로그래밍하다가 이런 객체에 대해 눈뜨게 된것은 디자인 패턴 때문이다. 객체를 이용하는 방법에 대해서, 객체를 구성하는 방법에 대해 잘 설명이 되어 있다.


객체에 대해서 잘 알고 있다면 객체지향언어에 대한 적응력은 매우 높아지므로 어느정도 수준에 올랐다면 꼭 짚고 넘어가도록 하자

덧글

  • 李相勳 2009/12/29 23:02 # 답글

    그러고 보니 저도 C++문법에 C식 프로그래밍을 참 많이 했었죠 ;;;
댓글 입력 영역