달력

032016  이전 다음

  •  
  •  
  • 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
  •  
  •  

'2016/03'에 해당되는 글 1건

  1. 2016.03.06 객체지향의 사실과 오해
구입한지는 1년이 넘었지만 저번주부터 새로운 마음으로 읽기 시작한 책
"객체지향의 사실과 오해"

동화책 읽듯이 쓱~~ 읽으면 객체에 대한 새로운 그리고 정확하게 정리해주는 아주 재밌는 책이다.


모든 내용이 다 괜찮지만 내 기억에 남은 것들을 정리해보려고 한다.

1. 바쁜 출근길에 생기는 커피 주문, 접수 그리고 만들기. 마지막으로 커피 마시기를 예를 들면서
역할과 책임 그리고 협력에 대해 설명한다.

선생님이라는 역할은 학생을 가르칠 책임, 경찰관이라는 역할은 범죄자를 검거할 책임 이런 느낌

각자의 역할과 책임이 명확한 상태에서 협력을 통해 사회를 이루듯, 객체도 역할과 책임이 "명확"하고 그 상황에서
메시지를 통해 다른 객체와 협력을 이룬다.


2. 엘리스가 문을 통과하기 위해 음료수 마시거나, 케익을 먹거나, 부채질을 하면서 키를 변경하는 예를 들면서
상태와 행동에 대해 설명한다. 

이때부터 '자율적인 객체'라는 말이 자주 나온다. 왕과 모자장수 얘기를 하면서도 객체의 자율성을 저해하게 되면(예를 들어
증언하라!! 가 아니라 '목격한 것을 떠올려라', '떠오르는 기억을 시간 순서대로 재구성하라'으로 자율을 제한)
결합도가 높아지고 재사용성, 유연성이 떨어진다. 모자 장수는 증언을 할 책임이 있는거지 목격한 것을 떠오를 책임,
기억을 재구성하는 책임이 있는게 아니다.

키포인트!! 객체가 현실세계를 반영한다고 대부분의 책들이 설명하는데 잘못 되었다고 얘기한다.
현실세계에서는 트럼프가 스스로 뒤집을 수 없고, 토끼가 뛰어다닐수 없다는것이다.
객체는 현실 세계를 바탕으로 한 '은유'를 통해 묘사한 것이라고 정의한다.


3. 지하철 노선도와 엘리스가 '기껏해야 트럼프에 불과해'라는 명대사를 예로 추상화를 얘기한다.
이때 golang의 duck typing이 떠올랐다.   어떤 것이든 꽥꽥이라고 울고 두발로 뒤뚱뒤뚱걸으면 오리로 판단하는것이다.

또한 추상화는 '증언하라'와 같은 수신자에게 최대한 자율을 존중하고 책임에 맞는 메시지를 만들기 좋다.


golang 으로 만나보는 duck typing



4. 객체를 만들때 객체에 초점을 맞추지 말고 어떤 메시지를 주고받으며 협력할지, 

그리고 각각의 메시지가 어떤 객체에 알맞은지 생각해서 해당 객체의 인터페이스로 만들어라!!  (What / Who)

이때 메시지는 너무 상세하면 안된다는 점!!  상세하면 객체의 자율성이 크게 줄어들고 그렇게 되면 객체 수정시 영향받는곳이 많아진다. 최대한 외부에 노출되는것을 적게하여 고객의 자주 수정되는 요구사항에 유연하게 대응한다.


기능 중심의 접근법이 아니라 안전한 구조 안에 기능을 입히는 방식으로 생각하는것을 추천한다.


마지막으로 "함께 모으기"는 도메인 모델 부터 인터페이스 정하기 그리고 실제 구현을 한다. 

지금까지 언급한것들을 하나하나 실제 적용해 간다. 

이때 꿀팁이 하나 나오는데 도메인 모델이나 인터페이스 계획에 너무 많은 시간을 쏟지 말고, 빨리 코드로 옮겨보고
계획한게 맞는지 검증하고 그렇지 않은 부분은 수정하는 방식으로 하라고 한다.



객체를 아직도 모르지만 새로운 관점으로 생각할수 있게 해준 고마운책이다. (정말 오랜만에 책 완독했는데 이 책이라 좋다!!)


1년전쯤(?) golang tip이라며 올라온 트윗글로 마무리를 한다.

전에 봤을 때와는 다르게 책을 읽고 다시 생각하니 확 닿는다.

#golang top tip: name your packages for what they provide, not what they contain.


저작자 표시 비영리
신고
Posted by 오산돌구