객체지향적인 프로그래밍이란 것은 무엇일까?

고등학교시절 C++을 알게 되면서 객체지향 프로그래밍(Object Oriented Programming, 줄여서 OOP) 에 대해 궁금증을 가지게 되었습니다.

도대체 이런 게 왜 필요하지? -_-??

일의 순서에 따라 작업을 처리하는 절차 지향적 프로그래밍 언어를 공부했던 저는 그래도 C의 신 버전이라는 착각 속에 공부를 시작했지만, 이놈에 Class에서 막히는 것이었습니다.

막힌 이유는 바로

대체 이걸 왜 써?

머리에 완벽히 절차지향으로 고정이 되어 버려서 필요성을 못 느꼈고, 게다가 엄청나게 늘어나 버리는 코딩 량의 압박에 좌절했습니다. (얼마나 늘어나는지 앞으로 보게 될 것 입니다. ㅎㅎ)

어째튼 그 뒤로 Rukxer형과 함께 일했을 때, HTML의 폼의 구조와 이것을 접근하는 JavaScript의 방식을 보고 조금씩 객체지향의 구조와 필요성을 알게 모르게 느껴가고 있었고, 대학에 들어가 Java를 배우니 왜 이것이 필요한지를 느끼게 되었고, 이제 나름대로 사용할 수 있게 되었습니다. (물론 잘 하는 건 아니지만 ^^;)

뭐 객체지향에 대해 설명하라면 제가 직접 하는 것 보다 책에 써 있는 것이 더 잘 표현되어있기 때문에 생략하고~

그럼 구체적으로 어떤 식으로 작성해야 객체지향 프로그래밍이 될까요? 들어가기 전에 절차지향적으로 작성된 프로그램의 예제를 가지고 설명해 보겠습니다.

Triangle.c

제가 자주 써먹는 (아주 우려 먹어라 -_-;;) 삼각형 예제를 가장 널리 쓰이고 있는 절차지향 언어인 C로 작성했습니다. 정말 간단하죠? 그럼 이것을 객체 지향 언어로 구현하면 어떻게 될까요?

Triangle.cpp

이렇게 될까요? 아니죠~ 객체지향 언어 가지고 절차지향으로 작성한 것 밖에 안됩니다. -_-+
그래서~ 준비했습니다. 객체지향 언어인 자바로 작하였고, 객체지향적으로 설계한 삼각형입니다.

.java

… 쿨럭!! -_-;;

C로 작성한 삼각형이 24라인으로 콘솔 모드로도 한 화면에 다 표시할 수 있는 것에 비해 자바로 작성한 삼각형은 모두 다 합쳐 무려 192라인으로 무려 8배나 되는 라인 수를 자랑합니다 -_-;;

그럼 간단히 해설에 들어가면
삼각형의 정의는 [삼각형(三角形)은 세 점을 선분으로 이어 만든 도형이다. 삼각형의 세 점을 꼭지점이라 하고, 선분을 변이라고 한다.] 라고 되어있습니다. (출처 : 위키)
간단히 이야기해 3개의 점에 선이 달린 것이 삼각형이랍니다 -_-;;

그런데 중간에 도형이라는 단어가 눈에 뜨이죠? 그래서 찾아봤습니다.
도형의 정의는 [기하학에서 도형(圖形)은 점•선•면의 집합이다.] (출처 : 위키)
결국은 삼각형은 도형중 하나인 것입니다. ㅎㅎ

그런데 또다시 눈에 띄는 것 중에 하나가 선이라는 것이 있습니다. 그럼 선은 무엇일까요?
선의 정의는 [선은 줄을 말한다] 랍니다. 장난하냐? (출처 : 역시 위키 -_-;;)
음음, 그럼 다른 곳을 찾아보려다 그냥 기억 속에 있는 것을 꺼내겠습니다.
언제인지는 모르겠는데, 하여간 수학시간에 이런 말을 들은 것 같습니다. [수많은 점들이 일열로 빈틈없이 늘어서면 선이 된다.] 하여간 이거만 믿고 갑니다 ㅋㅋ

다음 점에 대한 정의로 [점(點)은 수학에서 크기를 갖지 않고 공간을 점유하지 않지만 위치 등을 지정할 수 있는 가상적인 개체이다.] (출처 : 위키)
결국 이게 마지막인 것 같네요. 개체까지 내려왔으니까요 ㅎㅎ (프로그래밍에서 개체는 곧 객체가 됩니다.)

결국 필요한 것은 점, 선, 도형, 삼각형 이렇게 4개가 되겠습니다. 그리고 그것을 구체화 시킨 것이 바로 제가 작성한 삼각형이 되겠습니다. (1개 더 추가한 것은 선과, 도형 둘 모두 점을 필요로 해서 점을 저장해 두는 개체를 만들어 둘에게 상속받게 만들었습니다. 코드 양을 줄이기 위해 -_-;;)

어째튼 객체지향을 이해하신 분들이라면 소스를 보면 대충 이해는 하실 겁니다. 납득은 못하실 것 같지만 -_-;;
그렇다고 결국 객체지향은 나쁘다! 라고 이야기 하는 것은 절대 아닙니다. 객체지향적으로 작성할 경우 처음에는 좀 길어질 수 있지만 잘 만든 객체 하나 덕에 나중에 더욱 편하게 프로그래밍 작업을 할 수 있는 것이 바로 이 객체지향 프로그래밍이거든요. 요즘 졸업작품을 만드는 중인데 객제지향 프로그래밍에 대해 새삼 놀라움을 느낍니다. 정말 잘 만들어둔 객체 덕에 편하게 작업하고 있거든요 ^^ (구체적으로 다향성 덕에) 어째튼 여러분들도 심심하면 한번 도전해 보세요. 절차지향적인 프로그램을 객체지향으로 바꾸는 것을요 ^^

참고]
테스트에 사용한 컴파일러 : gcc 3.4.2, g++ 3.4.2, javac 1.6.0_02

문제될만한 부분이나, 버그를 알려주시면 감사하겠습니다 ^^

덧]
웃자고 만들기 시작했는데 정신을 차려보니 경각심을 불러일으킬 소지를 지는 글로 변했다는... 쿨럭!

신고
Trackback 1 Comment 4
  1. Favicon of http://signpen.net BlogIcon 싸인펜 2007.07.30 00:05 신고 address edit & del reply

    최근 객체지향에 대한 재미난 이야기를 친구에게 들어서 트랙백을 남겨봅니다.
    객체는 잘게잘게 쪼개야죠^^ㅋ 그리곤 객체 하나에 너무 많은 일을 시키면 안되죠. 공감합니다~ㅋ 코드는 자세히 살펴보진 못했지만요. 자바코드... 너무 길어요..;;

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.07.30 09:01 신고 address edit & del

      너무 잘개 쪼개면 성능저하가 일어나긴 하지만, 역시 적당히 잘개 쪼개줘야죠 ^^
      그리고 자바코드는... 일부러 길게 만들었습니다 ㅎㅎ
      객체지향의 은닉화 때문에 저런일이... 쿨럭!

  2. Favicon of http://mydb.tistory.com BlogIcon 파도소리 2007.09.02 20:02 신고 address edit & del reply

    형,, 아 또 이런걸.. ㅋㅋ

    • Favicon of http://www.myhyuny.net BlogIcon 화현 2007.09.02 23:22 신고 address edit & del

      너도 이런것좀 해봐 재미있어 ㅋㅋㅋ



티스토리 툴바