객체지향의 사실과 오해

1

내가 알고 있는 객체에 대해서 생각해 보게 되었다.

2

이제 다른 책을 읽으면서 느꼈던 이질감이 조금은 해결된 것 같다.

3

한 차워 더 높은 수준의 이야기라 많이 당황스럽지만, 당황스러움이 지나가면 많은 깨달음을 얻게 된다.


  1. “시너지를 생각하라. 전체는 부분의 합보다 크다.”, 스티븐 코비

  2. 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세게를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 버트란드 마이어는 “소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다.”는 말로 소프트웨어의 세계와 실세계 사이의 거리를 잘 표현하고 있다.

  3. […] 여러분은 객체지향에서 가장 중요한 개념 세 가지를 이미 이해했다는 점이다. 그것은 바로 역할, 책임, 협력이다.

  4. 훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다. […] 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.

  5. 객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지한다.

  6. 일반적으로 객체의 상태를 조회하는 작업을 쿼리라고 하고 객체의 상태를 변경하는 작업을 명령이라고 한다.

  7. 안타깝게도 상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다. […] “행동이 상태를 결정한다”

  8. […] 해리 벡은 런던 교통 박물관의 감독이었던 켄 갈란드와의 인터뷰에서 자신의 견해를 다음과 같이 설명했다. “이 지도는 상식에 근거한 것입니다. 지하철을 갈아탈 때 지형 때문에 골치 아플 필요가 있을까요? 지형은 중요한 것이 아닙니다. 중요한 것은 연결, 즉 열차를 갈아타는 것입니다.”

  9. […] 따라서 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것이다.

  10. 요약하면 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다.

  11. 디자인 패턴은 공통으로 사용할 수 있는 역할, 책임, 협력의 템플릿이다.

  12. “의도는 ‘메시징’이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다.”, 앨런 케이

  13. 훌륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다. 이것은 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서 고려해야 한다는 것을 의미한다. 이를 인터페이스와 구현의 분리 원칙이라고 한다.

  14. 미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다.

Written on October 18, 2015