[공부] 독서/오브젝트(5)
-
오브젝트 부록
부록 A 계약에 의한 설계 계약에 의한 설계를 이용하면 협력에 필요한 제약, 부수효과를 명시적으로 정의하고 문서화 할 수 있다. [535p] 사설) 자바의 경우 assert or Valid 어노테이션으로 계약에 의한 설계를 구현할 수 있다. 리스코프 치환 원칙은 계약에 의한 설계 원칙에서 정의한 계약 규칙과 가변성 규칙을 준수한다는 의미다. [571p] 계약 규칙 [547p] 서브 타입은 더 강력한 사전 조건을 정의할 수 없다. 서브 타입은 더 약한 사후 조건을 정의할 수 없다. 슈퍼 타입의 불변성은 서브 타입에서도 반드시 지킨다. 자식 클래스가 계약 위반 코드를 작성하는 것을 막는 방법은 모든 인스턴스 변수의 가시성을 private 으로 만드는 것이다. [557p] 계약 규칙에서의 사전조건, 사후조건,..
2020.03.22 -
오브젝트 13 ~ 15
13 - 서브 클래싱과 서브 타이핑 상속의 용도 [435p] 타입 계층을 구현 : 부모 클래스는 자식 클래스의 일반화라고 부르고 자식 클래스는 부모 클래스의 특수화라고 부른다. 코드 재사용 : 높은 확률로 강결합이기 때문에 사용하지 않는 것이 좋다. 객체 지향 프로그래밍에서 타입을 정의 하는 것은 객체의 퍼블릭 인터페이스를 정의하는 것과 같다. [438p] 객체를 바라볼 때 항상 객체가 외부에 제공하는 행동에 초점이 맞춰져야한다. 객체의 타입을 결정하는 것은 내부의 속성이 아니라 외부에 제공하는 행동이다. [439p] 슈퍼 타입 : 서브 타입이 정의 한 퍼블릭 인터페이스를 일반화 시켜 상대적으로 넓은 의미로 정의한것 서브 타입 : 슈퍼 타입이 정의 한 퍼블릭 인터페이스를 특수화 시켜 상대적으로 좁은 의미..
2020.03.19 -
오브젝트 09 ~ 12
09 - 유연한 설계 코드를 수정하지 않고 새로운 동작을 추가하는 방법은 컴파일 타임 의존성을 고정시키고 런타임 의존성을 변경하는 것이다. [283p] 개방 폐쇄 원칙의 핵심은 추상화에 의존하는 것이다. [284p] 객체의 생성은 피할 수 없다. 어딘가에는 객체를 생성해야한다. 객체 생성이 문제가 아니라 부적절한 곳에 객체가 생성되는 것이 문제다. 동일한 클래스에서 객체 생성과 사용이 이루어지는 것이 문제다. [287p] 팩토리 패턴으로 생성 책임을 전가하자. 생성과 사용을 분리하기 위해 객체 생성에 특화된 객체를 팩토리라고 부른다. [289p] 팩토리는 도메인 모델에 속하지 않는 순수한 기숧의 결정이다. 팩토리와 같이 도메인과 아무런 관련 없는 객체를 순수한 가공물(Pure fabrication)이라고..
2020.03.18 -
오브젝트 05 ~ 08
05 - 책임 할당하기 객체에게 중요한 것은 데이터가 아니라 외부에 제공하는 행동이다.[134p] 책임을 결정할 땐 메시지를 결정하고 메시지를 누구에게 전송할지 찾아보아라.[135p] 책임 주도 설계의 핵심은 책임을 결정한후 책임을 수행할 객체를 결정하는 것이다.[136p] GRASP : 일반적인 책임 할당을 위한 패턴 Information expert : 메시지를 수신할 적합한 객체는 누구인가? [139p] Low coupling : 낮은 결합도 [143p] High Cohesion : 높은 응집도 [143p] Creator : 어떤 객체에게는 다른 객체를 생성할 책임을 지게해야한다. [144p] Polymorphism : 타입에따라 변하는 행동이 있다면 타입을 분리하고 변화하는 행동을 각 타입의 책임..
2020.03.16 -
오브젝트 01 ~ 04
00 - 공통 연극 - 배우 - 배역 협력 - 역할 - 객체 설계란 코드를 배치하는 것이다. 01 - 객체 책임의 이동이 중요하다. 책임을 올바른 위치에 놓는 것만으로도 개선이 가능하다. 자신의 데이터를 스스로 처리하는 자율적인 객체를 만들어야 결합도를 낮추고 응집도를 높일 수 있다. [26p] 외부 간섭을 배제하고 메세지를 통해서만 협력하는 자율 객체를 만들어야한다. [26p] 절차 지향 => 객체가 소극적인 존재 객체 지향 => 객체가 적극적인 존재 객체를 적극적인 존재로 만드는 법 외부간섭을 줄인다. 메세지를 통해서만 협력한다. 사설) 스프링을 사용하다보니 비즈니스 로직이라는 이유로 모든 책임이 서비스 컴포넌트로 집중이되는데, 객체 지향이라는 관점에서는 좋은 설계는 아닌 듯 싶다. 02 - 객체 지..
2020.03.15