'C'에 해당되는 글 2건

  1. 2007.07.28 객체지향적인 프로그래밍이란 것은 무엇일까? (4)
  2. 2006.04.22 중간고사입니다

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

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

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

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

막힌 이유는 바로

대체 이걸 왜 써?

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

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

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

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

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

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

… 쿨럭!! -_-;;

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

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

중간고사입니다

배운 것이 뭐가 있다고 벌써 시험인지 ㅠ.ㅠ

하지만 대부분의 과목들이 실습수업이라 실기시험에 어느 정도 자신 있는 저는 한시름 덜긴 했습니다만…문제는 시험을 3과에 1개는 이론수업, 2개는 실습수업인데 실습수업을 실기로 보는 게 아닌 필기로 본답니다 -_-;;;;;

그 2개의 과목이 1개는 “컴퓨터 알고리즘”, 1개는 “임베이디드 프로그래밍”인데 둘 다 간단히 말해서 C로 알고리즘 구현과, Visual C++ 입니다. 그럼 뭐가 문제냐…
C 특성상 한번 마음 먹으면 포인터로 무진장이 꼬아서 낼 수 있는데 아무래도 2강사 모두 꼬아낼 가능성이 크기 때문입니다 ㅠ.ㅠ
어째튼 다른 학교들에 비해 수준이 낮은 것 같은 이 학교에서 A도 안 나오면 쪽팔릴 것 같으니 공부해야겠습니다 ㅠ.ㅠ

'학교' 카테고리의 다른 글

근황  (2) 2007.02.06
유비쿼터스 Dream 전시관  (2) 2006.08.29
Smart Home Network Show 2006을 다녀와서.  (3) 2006.06.01
중간고사입니다  (0) 2006.04.22
Trackback 0 Comment 0