Open EunHee-Jeong opened 2 years ago
지도가 범용적인 이유는 지도를 사용하려는 사람들이 원하는 기능
에 비해 지도에 표시된 구조
가 더 안정적이기 때문이다.
요구사항은 계속 바뀐다.
기능에 비해 잘 변하지 않는 안정적인 지형 정보를 기반으로 하고 있기 때문이다.
지도 은유의 핵심은 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이라는 것이다.
초기 설계 단계에서 특정 뷰를 바로 보기 보다는 전체적인 flow를 먼저 확인한 후 데이터 모델을 설계하고, 후에 코드를 작성하라고 들었던 조언이 떠올랐다.
즉, 객체지향은 자주 변경되는 기능이 아니라 안정적인 구조를 기반으로 시스템을 구조화한다.
요구사항도 수용할 수 있는 코드
우리는 미래를 예측할 수 없다. 단지 대비할 수 있을 뿐이다.
미래에 대비하는 가장 좋은 방법은 변경을 예측하는 것이 아니라 변경을 수용할 수 있는 선택의 여지를 설계에 마련해 놓는 것이다.
설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.
~디자인 패턴을 코드에 잘 녹여내보자…~
위처럼 생각했다가 방금 좋은 레퍼런스를 읽어서 핵심 부분만 가져와봤다.
원리를 잊지 말아라.
코드는 반드시 읽기 쉬워야 한다. 원칙 주의자가 되지 말자. (디자인 패턴에 있어서) 프로젝트의 패턴을 적용한 이유를 잊지 말자.
> [추가적으로 읽으면 좋은 글](https://velog.io/@eddy_song/alan-kay-OOP) (코드가 Swift 언어로 나옴)
## 183p
변경에 대비하고 변경의 여지를 남겨 놓는 가장 좋은 방법은 자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것이다.
객체지향 접근방법은 자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다.
객체의 구조에 집중하고 기능이 객체의 구조를 따르게 만든다.
시스템 기능은 더 작은 책임으로 분할되고 적절한 객체에게 분배되기 때문에 기능이 변경되더라도 객체 간의 구조는 그대로 유지된다.
객체 지도