객체지향의 사실과 오해

객체지향의 사실과 오해

객체지향의 사실과 오해

까마득한 옛날이지만 친구와 객체지향이란 것에 관해 얘기했던 기억이 떠오른다. 사실 객체지향이 뭐냐는 질문에 지금도 답하기 곤란하긴 마찬가지지만 당시엔 아는 것은 전혀 없으면서 들은 풍월에 혼자 흥분해서 상속이 어쩌고 재활용이 어쩌고 떠들던 기억이 난다. 그렇다. 대부분 객체지향하면 떠오르는 이미지는 클래스, 상속, 다형성, 데이터 은닉 등 많이 들어본 풍월, 딱 그 정도다.

사실 객체지향은 관심을 갖고 공부하지 않으면 의외로 제대로 접하기조차 어렵고 이를 이해한다는 건 더욱 어렵다. 프로그래밍을 공부할 때 가장 먼저 보게 되는 것은 프로그래밍 언어 책이다. C/C++, Java, C# 등 객체지향적 언어를 다루는 책에는 빠짐
없이 객체지향에 관한 간략한 소개가 등장한다. 클래스가 뭔지 상속은 어떻게 하고 다형성은 뭔가 등등. 하지만 딱 거기까지다.
이는 ‘객체지향’이란 용어가 등장하는 학원 교육 과정도 큰 차이는 없는 듯하다. 언어 관점에서 객체지향을 활용하는 방법에 관해서만 소개하기에 대체 어떻게 써야 잘 썼다는 소문이 날까에 관해서는 그닥 고민이 없다, 결국 그저 클래스만 만들 뿐이다.

객체지향에 관해 통달한 것처럼 보인다, 뭔가 큰 문제 제기 내지는 비판이라도 던질 것처럼. 하지만 이렇게 떠드는 나 역시 제대로 공부한 적이 없으니 여전히 객체지향을 깊이 있게 이해하지도 못하며, 그나마 쬐끔 아주 쬐끔 비슷하게나마 써 보려 노력하는 중이지만 쉽지 않다. 머리로 아는 것과 몸으로 익히는 것은 또 다른 문제다. 과거 열심히 만들었던 코드를 보면 대체 어디까지 추상화해 클래스를 만들어 내야 하는 걸까 궁금해 하며 엄청나게 거대한 중앙 집권적 클래스도 만들어 내곤 했고, 점점 불어가는 덩치에 두려워(?)하면서도 일단 바쁘니 넘어가자며 외면하기도 했다.

그렇게 어둠 속을 헤매던 중 나름 크게 깨닫게 된 한 마디는 ‘위임’이다. 혼자 모든 것을 처리하는 거대한 객체를 만들지 말라는 말은 익히 알고 있지만 실제 코드를 만들다 보면 그 속에 빠져 이걸 떼어내야 할지 합쳐야 할지 아리송할 때도 있다. 게다가 클래스를 나누려면 일도 더 늘어나니 왠지 귀찮다. 그리곤 결국 하나로 만든다. 그렇게 덩치 큰, 빅브라더가 탄생한다. 하지만 위임을 항상 염두에 두면서 조금씩 바뀐다. 뭔가 조금 다른 듯하거나 뭔가 이 객체에서 처리하기 애매해 보이면 몽땅 다른 객체로 떠 넘긴다. 바로 위임이다. 이제 수 많은 작은 클래스가 등장하고 왁자지껄한 객체로 넘쳐난다.

책 얘기를 하려 했는데 거칠게 휘갈겨 쓴, 자기 고백에 가까운 서두가 쓸데없이 너무 길었다. 사실 이론을 다루는 책은 큰맘 먹지 않으면 손이 잘 가지도 않고 막상 집어 들어도 내용이 녹록치 않으며 곧 지루해진다. 그런 면에서 이 책이 반갑다. 그리 두껍지 않으며 같은 내용을 반복하는 느낌도 없지 않아 있지만 객체지향의 근본이라 할 수 있는 역할, 책임, 협력을 끊임없이 강조하고 반복한다. 위임이란 것도 결국은 각자의 역할에 따라 맡은 책임을 다 하되, 직접 처리하지 못하는 일은 그 일을 할 수 있는 다른 객체에게 요청하는 것이며 여기서 협력이 생겨난다.

흔히 접하는 카페 풍경을 시작으로 익히 알고 있는 ‘이상한 나라의 앨리스’를 통해 객체지향이란 대체 무엇인지 천천히 알아가다 보면 어느새 ‘그래, 그런 거였어.’라는 생각을 하게 된다. 물론 객체지향에 대한 전문가가 된 것은 아니지만, 그저 함수 대신
클래스만 양산하는 수준을 벗어나 어떻게 하면 객체지향적으로 코드를 구현할 수 있을까 고민하는 출발점으로 삼기에는 충분할 듯하다.

적고 보니 서두만 길고 책 내용은 별로 없는 용두사미의 전형이 돼 버렸다. 아무튼 이제 프로그래밍을 공부하는 분이든 이미 프로그램을 많이 만들고 있는 개발자든 객체지향에 관한 너무 어려운 책 말고 이 책을 옆에 두고 천천히 읽어 보면 좋을 듯하다. 뭔가 뇌리에 팍 꽂히는 게 있으면 그때 더 어려운 책을 공부해도 충분할 테니.

Notes:
1. 당시 그 친구는 프로그래밍을 몰랐고 난 겨우 언어 기초만 아는 정도였다.
2. ‘나름’이란 말에 주의하자.
당시 그 친구는 프로그래밍을 몰랐고 난 겨우 언어 기초만 아는 정도였다.
‘나름’이란 말에 주의하자.