객체지향? 개뿔~!! 씨리~ 깐따라삐아

May 23, 2005 20:59
 
요즘 '웃찾사'를 보면 '깐따삐아 논평"이라는 걸 한다. 아주 재밌다.
김세아인가 하는 개그우먼이 나와서 "씨리~ 깐따라삐아!"로 시작해서 은근히 험한 소리를 섞어가며 하는 만평이 왜 그리 속이 통쾌하고 재밌는지.. .ㅋㅋㅋ
음, 문득 블로그를 채우기 위해서 여태껏 내가 써 놓은 Smalltalk 관련 글들을 보니, 갑자기 깐따삐아 만평이 떠올라서, 나도 한 번 '씨리~ 깐따라삐야~!" 해볼란다.
 
'관'(觀)이란 중요하다는 말을, 대학 강의 때 무수히 들었다.그걸 우리 교수님은 '패러다임'(paradigm)이라 하시더라.... 사물을 보는 관 말이다.
어떤 사람이 '나는
C++C++
C++
로 프로그래밍 한다'고 말한다고 해서 과연 그 사람이 진정으로 객체지향 프로그래밍(OOP)을 한다고 할 수 있을까?
객체지향
객체지향
은 하나의 '관'이다. 그게 내 생각이다. 모든 사물과 관념을 '객체'로 바라보고 생각하는 것이 바로 '객체지향'이다.
그런데 내가 처음
SmalltalkSmalltalk
Smalltalk
를 접했던 1998년 당시만 해도 객체지향이라는 관을 제대로 가지고 있는 프로그래머가 드물었다. 교보문고에서 프로그래밍에 대한 책들, 특히 C++ 기초를 설명한 책들을 보면 씨리~ 깐따라삐아~ 열불이 나서, 깐따라삐야~ 돌아버릴 것 같다~ 깐따라삐야!
책에는 버젓이 '객체지향'이라고 써 놓았는데, 도대체 씨리 깐따라삐아~! 객체지향은 무슨 객체지향? 개뿔~! 씨리 깐따라삐야~
태반 이상의 책이 '
CC
C
언어와
C++C++
C++
의 차이점'으로부터 설명을 시작하고, C언어에서 쓰던 코드를 C++로 바꾸어 놓고는 자랑스럽게'객체지향'이라고 떠든다.
나도 처음에는 그런 줄 알았다. 하지만 이러한 접근은 '객체지향'이 무엇인지 모르는 사람들에게 상당히 큰 혼란을 주었다. 뭐, 저자나 번역자 자체도 객체지향적인 개념이 없었으니 그 개념 없는 지식들을 그대로 받아 읽는 독자들이야 어련하랴.
대부분 이런 책들은 class, virtual, inline 등을 그저 문법적으로만 다루었다. 그리고 별 도움도 되지 않는 예제들을 실어놓았다. 도대체 그게 왜 필요한건데...
 
만약 C++에 대해서 설명을 하려고 했다면, 그리고 그 언어를 '제대로된 객체지향의 관'을 가지고 설명을 했더라면 굳이 C언어와 비교할 필요가 있었을까? C++의 문법적인 설명, 그게 중요한 게 아니었다. 물론 기존의 C를 알았던 사람들을 위해서라면, 부록 쯤에 두 언어의 문법적 차이를 따로 설명해 놓으면 그것으로 그만이다.결국 이런 문법적인 설명은, 많은 사람들이 C++를 C처럼 사용하는 해괴한 현상을 만들어 놓았다.
그뿐인가?
DelphiDelphi
Delphi
로 코딩을 해 놓은 걸 보면, 정말 가관이다. 각각의 이벤트 핸들러에 뒤죽박죽으로 코딩을 해 놓아서, 결국 스파게티를 만들어 버린다.
 
이게 객체지향인가?
씨리, 깐따라삐야~ 객체지향? 개뿔~~!이다.
 
C++와 Object Pascal... 이들 모두 '혼합 객체지향 언어'이다.쉽게 말해서 '짬뽕'이라는 말이다.
CC
C
언어와
Pascal Pascal
Pascal
의 문법을 확장하여 객체지향의 개념을 담아내려 했으니 어쩌면 이러한 혼란은 당연한지도 모르겠다.
 
 
 
내가 처음 'Discovering Smalltalk'라는 책을 읽었을 때 경악했다.내가 Smalltalk를 처음 접한 게 97년 정도이니, 약 8년 정도가 되었는데,이 책을 읽고 Smalltalk를 공부하기 시작하면서,드디어 나는 어둠을 해치고 빛을 향해 나가는 기분이었다.
Smalltalk를 공부하고 객체지향의 '관'을 정립하면서,나는 깨달았다. class, virtual, inline.... 이런 게 왜 필요한지를 말이다.
Smalltalk를 사용하는 분야는 매우 적고 프로그래밍을 하는 사람들도 드물다. 하지만, Smalltalk 를 공부하고 그것으로 프로그래밍을 해 본 사람은 객체지향이라는 것이 무엇이고, 어떻게 접근해야 하는지 안다.
 
나의 가장 든든했던 Smalltalk 교과서. Discovering Smalltalk.나의 가장 든든했던 Smalltalk 교과서. Discovering Smalltalk.
나의 가장 든든했던 Smalltalk 교과서. Discovering Smalltalk.
Smalltalk를 알기 전에 내가 짰던 코드들과 지금의 코드들을 비교해 보면 깜짝깜짝 놀랄 때가 많다. 적어도 나는 지금, 100%는 아니지만, 80% 정도로 '객체지향'이라는 '관'이 정립되어 있다고 자신있게 말할 수 있으며, 이에는 Smalltalk의 공이 컸다.
C와 C++는 근본부터 다른 언어이고, 다른 패러다임을 표현하는 언어이다.
 
  • "나는 C++은 잘 하는데 MFC는 모르겠다."
  • "나는 Delphi는 잘 다루는데, 컴포넌트 만드는 건 어렵다"
  • class는 "기능(function)과 자료(data)의 복합체"이다.
 
이런 식으로 말하고 생각하는 사람들에게 나는 한 마디 하고 싶다.
 
빨리 그 생각을 버리라고...
 
객체지향은 그런 것이 아니다. 그리고 Smalltalk를 공부해 보라고 권하고 싶다. 순수한 객체지향 언어인 Smalltalk를 공부하면 여태껏 객체지향에 대해서 모호했던 것들이 풀릴 것이고 여러분이 객체지향적인 '관'을 굳건히 하는데 크게 도움이 될 것이다.
C#C#
C#
?
Java Java
Java
? 글쎄... 이런 언어들이, C++이나 Object-Pascal 보다는 더 객체지향 언어에 가까운지 모른다. 그러나 Smalltalk만큼 논리정연하고 깊이 있는 객체지향 프로그래밍을 공부하는데 도움이 된다고는 생각하지 않는다.
포크를 다루는 사람은 젓가락으로 무언가를 '찍어먹으려는' 생각을 한다. 젓가락을 젓가락으로 생각하고, 그것을 쓰는 연습을 해야만 젓가락으로 음식을 '집어 먹을' 수 있다.
여러분도 짬을 내서 Smalltalk 언어를 공부해 보기 바란다. 그리고 객체지향 프로그래밍에 대한 굳건한 '관'을 세우자.
객체지향 언어로 프로그래밍을 짠다고, 씨리~깐따라삐~야!
뭐든지 다 객체지향은 아닌 것이다.... ^^

 
Jun 27, 2020 02:36
도대체 뭐가 그렇게 분했고 열이 받았던 걸까? 그래. 그 때는 정말 '젊은 혈기'가 가득했다. 시중에 나와 있는 책들을 보고 절망했으며 분노했다. 사실 그 시기에 객체지향 개념과 프로그래밍 언어, 그리고 그를 둘러싼 환경은 성숙기에 접어들고 있었다. 여러 회사는 '객체지향' 딱지를 붙여서 열심히 자신의 솔루션을 홍보하고 팔아치우던 시절이었으니까. 진짜 '객체지향'을 넣지 않으면 장사가 안 되던 시절이 그때였다.
그런 상황에서 너도 나도 '객체지향'을 부르짖던 그 때 그 '하찮은' 것들에 대해서 분노했던 것 같다. 하지만 모든 것에는 다 이유가 있는 법. '어른들의 사정'을 알 리 없었던 치기 어린 그 때 써놨던 글을 지금 이렇게 정리하고 있으니 정말 손발이 다 오그라들 지경이다.
아마도 앞으로 글을 더 정리하면서 내 손과 발은 아마도 없어져버리지 않을까?