티스토리 뷰

반응형

1년도 전에 산 책인데 이제 여유가 읽게 되었다. 내 글을 다 읽지 않을 분들을 위해서 먼저 결론을 적어본다. 

  1. 객체지향의 패러다임을 가진 언어로 프로그래밍 하시는 모든 분들이 읽었어 한다. 특히, 객체지향적으로 사고하기를 어려워 하시는 분들이 읽어보시면 큰 도움이 될 것이다.
  2. 객체지향을 공부하고자 하는 학생이 꼭 읽어야 한다. 위키피디아, 나무위키를 보지 말고 꼭 이 책을 읽어야 한다.

"~할 것 같다"라고 하지 않고 단정지은 이유는 그 만큰 이 책을 읽고 큰 확신을 얻었기 때문이다. 이 책을 읽고 느끼고 배운 바를 키워드에 따라서 정리해보고자 한다. 


사실과 오해

자바 혹은 C++를 배우게 된다면 객체지향이라는 단어를 배우게 된다. 그러나 그것은 객체를 표현하는 문법을 배우기 전에 잠깐 배우는 것일 뿐이다. 막상 프로그래밍 하게 되면 이전에 작성하던 절차지향과 별반 차이가 없다. 왜냐하면 객체지향이라는 패러다임을 제대로 이해하지 못했기 때문이다. 클래스 지향적인 설명, 실세계와 1:1로 매핑하는 설명, 요구사항에서 명사는 클래스고 동사는 메서드라는 설명 등은 실제 객체 지향적인 사고를 하고 프로그래밍 하는데 방해만 되었다. 이 책은 그 잘못된 오해를 사실로 바로잡는 책이다.

협력! 그리고 책임과 역할

이 책에서는 책임, 협력이라는 단어가 계속 나온다. 그만큼 책임과 협력이 중요한 것이기 때문이다. 결국 어떤 프로그램은 입력이 들어가면 출력이 나오는 어떤 책임이 있다. 그리고 그 책임을 수행하기 위해서 객체들의 협력을 먼저 설계한다. 어떤 객체가 어떤 메세지를 다른 객체에게 전달하는 지에 대해서 먼저 그려보는 것이다. 그 협력에 대한 설계는 기존의 도메인 모델에 기초하는 것이 좋다. 그 메세지를 바탕으로 실제 객체를 설계하고 구현한다. 서브 프로그램에 대해서도 동일한 방식으로 재귀적으로 설계한다. 이것이 책임 주도 개발방법론이다.

의인화와 은유

현실세계의 객체와 소프트웨어의 객체 사이에는 큰 간극이 존재한다. 그 누구도 이 간극에 대해서 자세히 설명해주지 않았다. 그러나 이 책에서는 엘리스의 동화를 가지고 의인화, 은유로 자세히 설명하고 있다.

예를 들어 쿠폰이라는 현실 세계의 객체가 있다. 어떤 상품을 할인할 때 사용하는 객체이다. 누군가 쿠폰을 제시하지 않으면 아무일도 일어나지 않는 수동적인 객체이다. 그러나 소프트웨어 세계에서는 쿠폰은 스스로 할인가를 계산할 수 있는 객체로 설계할 수 있다. 그리고 비슷한 수동적인 객체들끼리 협력하여 프로그램을 구성한다. 이 책에서는 현실 세계와 소프트웨어 세계의 간극을 의인화로 설명해준다. 현실세계에서 전혀 능동적이지 않는 객체들을 소프트웨어 세계에서 의인화하여 상호 협력할 수 있도록 구현하는 것이다.

의인화라는 것을 생각해보면 소프트웨어의 세계와 현실 세계는 엄연히 다르다. 그러나 현실 세계를 보고 소프트웨어의 세계를 이해할 수 있다. 그것은 소프트웨어는 현실세계에 대한 은유(metaphor)라고 하면 설명이 된다. 현실 세계의 객체의 이름을 차용함으로서 표현적 차이를 줄이고 코드를 좀 더 쉽게 이해할 수 있도록 하는 것이다.

메서드보다는 메세지

협력은 객체들간의 메세지의 흐름이라고 이해할 수 있었다. 메세지는 객체에게 무엇(What)을 하라고 전달한다. 우리가 흔히 말하는 메서드는 객체가 메세지를 수행하는 방식을 이야기 한다. 매서드는 무엇을 할지에 대해서 실제로 어떻게(How)하는 지 정의하는 것이다. 메세지가 적당히 추상화가 되어있다면 메서드를 바꿔서 변경에 대응할 수 있다. 같은 메세지에 대해서 여러 메서드가 있는 것이 바로 다형성인 것이다.

처음 부터 메세지를 잘 뽑아낼 수도 있고, 아니면 리팩토링을 통해서 메세지를 뽑아낼 수 도 있다. 어찌되었든, 메서드보다 메세지를 잘 도출해내야지 다형성을 이용하여 변화에 쉽게 대응할 수 있는 것이다.

이해하기 쉽고 변화에 잘 대응하는 설계

아직까지는 소프트웨어는 사람이 만들고 관리한다. 그래서 사람이 쉽게 읽고 이해할 수 있게 작성해야 하며, 요구사항의 변화에 잘 대응해야 한다. 그런 소프트웨어를 만드는 것은 굉장히 어려운 일이다. 특히 여럿이서 협업할 때는 더 어렵다. 객체 지향은 그 문제를 해결하기 위해 오래 전부터 있어온 방법론이다. 그러나 많은 개발자들이 객체지향에 대해서 오해를 가지고 소프트웨어를 만들고 있다. 이 책을 통해서 그 오해를 해소하고 좀더 나은 삶(어려운 코드 유지보수하느라 야근하는 것보다 나은 삶)을 살았으면 한다.

PS. 소설가의 객체지향 책?

이 책을 읽으면서 (조금 과장해서) 등단한 소설가의 글을 보는 듯 했다. 문장이 유려하고 읽기에 편했다. 조영호님의 다음 책이 기대가 된다.

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함