Skip to content
 

객체지향 프로그램

국내에 객체지향이란용어가 처음 등장한건 아마도 92년쯤인걸로 기억한다..벌써 10년도 더 흐른셈이다..또 나이먹는 느낌..ㅠㅠ

처음 객체지향이라는걸 접한건 볼란드에서 나온 C++ 컴파일러 사용하면서 부터였다. 처음 C++ 컴파일러를 만났을때는 C++ 에 대한 내용은 전혀 이해를 못했으며 객체라는 용어조차 매우 생소할때였다. 그 시절 하이텔을 많이 사용하던 때라 하이텔 개발자 포럼에 글도 올렸던 기억이 있다. 국내에는 아직 소개가 안된 컴파일러였고 나는 지인을 통해서 미국에서 직접 컴파일러를 구했으니까 그당시로서는 국내에서 몇번째 안될 정도에 C++ 을 만남 셈이였다. 그 당시 글의 내용은 C++에 대한 내용이 아니라 요즘은 너무나 흔한 신택스 하이라이트 에디터에 대한 내용이였다. 변수, 명령어, 연산자들의 색깔이 다른걸 그때 처음봤으니까 정말 이런게 가능하구나 할정도로 획기적인 에디터 였다. 마치 시골사람이 첨보는 물건을 신기하게 생각하는 수준인거 같다..^^

그때 처음 C++를 처음 만났을때의 느낌은 C와 별다름이 없다는 생각이였다. 근데 왜 객체라는 말을 쓰고 D 도 아닌 C++ 일까 참 오랬동안 생각을 했었던 기억이 있다.
프로그램이라면 밤낮을 안가리던 때라서 정말 열심히 C++을 공부했다. 하지만 정말로 나 자신의 역부족을 절실히 느끼기도 한때였다.

그당시 C++ 관련책자는 정말 다 사다가 읽으면서 객체지향의 의미를 정확히 알고 싶었지만 어디 물어볼때도 없고 읽을만한 책도 없을 때인지라 거의 1년정도 책만보면서 머리를 싸맨거 같다. 중간에 2번씩이나 이건 내 머리로는 안된다고 한두달 책을 덮고 포기할 정도록 막막하기도 했었다.

1년이 넘고 거의 2년이 다돼갈 무렵 정말 수십번 그 뜻이 이해될까 싶을 정도록 책을 계속 보다 보니 정말 어느 순각 객체라는 의미가 머리에 정리가 되기 시작했다.

요즘이야 워낙 쉬운 예제나 해당 분야에 대한 정보가 넘치다 보니 1주일도 안 걸릴 일이지만 ㅠㅠ

나 나름대로 의 객체를 정의하면 바로 명사..정확히 말하면 주어라고 생각한다. 모든 프로그램어들이 공부를 하는건 바로 함수를 주로 하게 된다. 그 함수를 위주로 프로그램을 공부한 나로선 명사의 의미인 객체를 이해하는데 시간이 많이 걸릴 수 밖에 없었던거 같다.

C언어는 함수 지향 프로그램이다.
그래서 프로그램을 짜기 전에 함수를 정의하고 그 함수에 넘길 인자와 반환값과 그 함수에서 연산할 로직을 설계하는 방식이 바로 함수 지향 설계법이다. 아직까지도 많은 프로그램어가 이 방식으로 개발을 하고 있기도 하다.

여기서 함수는 바로 동사에 해당된다. 프로그램 설계란 문자을 분석하는 방식과 매우 흡사하다. 그래서 함수 지향주의 경우는 일단 문장의 동사에 밑줄을 그은 다음에 주어를 인자로 목적어를 반환값을 정하는 방식인데 반해서 객체지향의 경우는 주어를 클래스로 동사를 내부함수 형태로 구조를 바꾸는 방식이다.

간혹 프로그램어들이 1 또는 0 만 알고 사고 방식이 보통사람들과 다른다는 평을 자주 듣는다. 그건 바로 매사를 함수지향주의로 보다 보니 일상을 보는 시각도 변했기 때문이다.

우리가 살고 있는 세상은 동사위주가 아닌 주어 위주의 객체지향주의에 살고 있는것이다. 내가 살기 위해서 여러가지 방법을 선택하는 것이지 내가 살기 위한 방법을 정해놓고 내가 거기 맞춰 나가는게 아니라는 뜻이다. 객체지향주의란 바로 우리 주변의 많은 현실과 동일한 시각에서 출반한 설계방법이다.

C 에서 D가 아니고 C++인 이유가 바로 여기에 있다.
만일 획기적인 알고리즘 또는 결과물 표시 방법이 바뀌었다면, 마치 도스에서 윈도우처럼…이경우라면 D가 맞다고 생각한다.
하지만 C++는 C의 언어의 문법과 기법을 그대로 이용하면서 객체를 설계할 수 있는 기법으로 바뀌었다는 점에서 C++ 가 된것이다.

많은 사람들이 C와 C++이 어떤 차이가 있냐고 질문을 하지만 두 언어는 단순 비교 대상이 아니라 그 언어를 어떤 관점에서 사용하느냐에 차이가 있다고 할수 있다. C++을 C와 똑같이 사용할 수도 있고. 순수 C만으로도 객체지향적으로 코딩이 가능하다.

단지 좀더 객체지향적인 프로그램이 쉽도록 새로운 문법이 약간 가미된 형태가 바로 C++이라는 것이다.

C++에서 나타난 가장 대표적인 문법이 바로 상속성이다.
나 역시 상속성에 대한 부분을 객체지향에서 가장 중요하게 생각하는 부분이기도 하다.

우리가 삶을 사는 방식을 절대로 당대의 지식과 판단으로 살수는 없다. 과거가 없는 현재와 미래가 없다는 이유인것다. 바로 이 부분이 상속성에 해당하는 것이다. 과거의 장점과 현제의 새로운 점과 미래에 대한 예측의 조함이 바로 객체 상속이라는 점이다.

객체라는 특성은 상속 뿐만이 아니라 추상화 캡슐화 재사용화 등 많은 내용이 있지만 프로그램적인 용어보다는 객체라는 그 차체를 정리하고자 가급적 기술 용어를 자제하다보니 설명이 쉽지 않지만 객체라는게 단순명료하게 한마디로 정리되기가 쉽지 않은 의미인지라…

한동안 C언어에 빠져있데 나에게 새로운 시각으로의 설계 방식은 정말 개인적으로 신대륙을 발견한 기분이였으며 만나는 엔지니어마다 객체지향을 설명하고자 여기저기 날뛰던게 엊그제 일만 같다.

객체지향이란 프로그램을 좀더 우리 삶의 관점으로 설계하고 관리하는 기법이지 단순 코딩에만 적용되는 것이 아니라 회사생활이나 다른 어떤 모든것에도 적용될만한 대단한 이론이라고 생각한다.

다음번 글은 프로그램 관점에서의 객체를 정리해야겠다.

2 Comments

  1. sr says:

    저는 C 만 해봐서 C++ 이나 객체지향이란 단어에 막연한 두려움을 갖고 있었는데
    간단명료한 정리로 두루뭉실했던 C++ 에 대한 느낌이
    어느정도 명확한 생각으로 발전할 수 있을 것 같다는
    생각이 드네요 ^^
    글 잘 읽었습니다.

  2. close says:

    일년전에 교양으로 자바를 배웠던., 수학과 학생인데.. C++도 나온지가 꽤 됬군요 하하하. 잘 읽었습니다.

Leave a Reply