객체지향의 사실과 오해
1
내가 알고 있는 객체에 대해서 생각해 보게 되었다.
2
이제 다른 책을 읽으면서 느꼈던 이질감이 조금은 해결된 것 같다.
3
한 차워 더 높은 수준의 이야기라 많이 당황스럽지만, 당황스러움이 지나가면 많은 깨달음을 얻게 된다.
-
“시너지를 생각하라. 전체는 부분의 합보다 크다.”, 스티븐 코비
-
객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세게를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 버트란드 마이어는 “소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다.”는 말로 소프트웨어의 세계와 실세계 사이의 거리를 잘 표현하고 있다.
-
[…] 여러분은 객체지향에서 가장 중요한 개념 세 가지를 이미 이해했다는 점이다. 그것은 바로 역할, 책임, 협력이다.
-
훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다. […] 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
-
객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지한다.
-
일반적으로 객체의 상태를 조회하는 작업을 쿼리라고 하고 객체의 상태를 변경하는 작업을 명령이라고 한다.
-
안타깝게도 상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다. […] “행동이 상태를 결정한다”
-
[…] 해리 벡은 런던 교통 박물관의 감독이었던 켄 갈란드와의 인터뷰에서 자신의 견해를 다음과 같이 설명했다. “이 지도는 상식에 근거한 것입니다. 지하철을 갈아탈 때 지형 때문에 골치 아플 필요가 있을까요? 지형은 중요한 것이 아닙니다. 중요한 것은 연결, 즉 열차를 갈아타는 것입니다.”
-
[…] 따라서 타입을 구현하는 가장 보편적인 방법은 클래스를 이용하는 것이다.
-
요약하면 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다.
-
디자인 패턴은 공통으로 사용할 수 있는 역할, 책임, 협력의 템플릿이다.
-
“의도는 ‘메시징’이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다.”, 앨런 케이
-
훌륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다. 이것은 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서 고려해야 한다는 것을 의미한다. 이를 인터페이스와 구현의 분리 원칙이라고 한다.
-
미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다.