D269 2023. 7. 1. 12:07
728x90

6일차.

 
오브젝트: 코드로 이해하는 객체지향 설계[1주차_토요일]
65~77pg
 
 

#요약 

 **Chapter 02. 객체지향 프로그래밍** 

(feat. 가벼운 마음가짐)
 

05. 추상화와 유연성
1) 추상화의 힘.
- 추상화 사용의 장점1 : 추상화의 계층만 따로 떼어 놓고 살펴보면 요구사항의 정책을 높은 수준에서 서술할 수 있다는 것.
- 추상화 사용의 장점2 : 추상화를 이용하면 설계가 좀 더 유연해진다는 것.
- 디자인패턴, 프레임워크 모두 추상화를 이용해 상위 정책을 정의하는 객체지향의 메커니즘을 활용하고 있다.
 
2) 유연한 설계
- 항상 예외 케이스를 최소화하고 일관성을 유지할 수 있는 방법을 선택하라
 
3) 추상 클래스와 인터페이스 트레이드오프
- 구현과 관련된 모든 것들이 트레이드오프의 대상이 될 수 있다는 사실.
 
4) 코드 재사용
- 상속은 코드 재사용을 위해 널리 사용되지만, 가장 좋은 방법은 아님.
- 합성(composition) : 다른 객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 재사용하는 방법
 
5) 상속
- 상속이 설계에 안 좋은 영향1 : 상속이 캡슐화를 위반함
- 상속이 설계에 안좋은 영향2 : 설계를 유연하지 못하게 만듦. : 부모 클래스와 자식 클래스 사이의 관계를 컴파일 시점에 결정하기 때문에 실행 시점에 객체의 종류를 변경하는 것이 불가능하다.
 
6) 합성
- 인터페이스에 정의된 메시지를 통해서만 코드를 재사용 하는 방법.
- 합성은 상속의 2가지 문제점을 해결한다.
- 1. 인터페이스에 정의된 메시지를 통해서만 재사용이 가능하기 때문에 구현을 효과적으로 캡슐화할 수 있다.
- 2. 의존하는 인스턴스를 교체하는 것이 비교적 쉽기 때문에 설계를 유연하게 만든다.
- 상속은 클래스를 통해 강하게 결합되는 데 비해 합성은 메시지를 통해 느슨하게 결합된다.
 


 
 **Chapter 03. 역할, 책임, 협력** 
 
- 객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력이다.
 
01. 협력
1) 영화 예매 시스템 돌아보기
- 다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용한다는 점
- 협력 : 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용
- 책임 : 객체가 협력에 참여하기 위해 수행하는 로직
- 역할 : 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.
 
2) 협력 
- 협력은 객체지향의 세계에서 기능을 구현할 수 있는 유일한 방법
- 두 객체 사이의 협력은 하나의 객체가 다른 객체에게 도움을 요청할 때 시작된다.
- 메시지 전송(message sending) : 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단
- 메시지를 수신한 객체는 메시지를 처리할 방법은 스스로 선택한다. -> 자율적인 존재
- 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화 하는 것.
 
3) 협력이 설계를 위한 문맥을 결정한다.
- 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력
- 객체의 행동을 결정하는 것이 협력이라면 객체의 상태를 결정하는 것은 행동이다.
- 객체가 참여하는 협력이 객체를 구성하는 행동과 상태 모두를 결정한다.
- 협력은 객체를 설계하는 데 필요한 일종의 문맥(context)을 제공한다.
 
 
 
 

 

#발췌

추상화를 이용해 상위 정책을 기술한다는 것은 기본적인 애플리케이션의 협력 흐름을 기술한다는 것을 의미한다.
유연성이 필요한 곳에 추상화를 사용하라
코드를 재사용하는 경우에는 상속보다 합성을 선호하는 것이 옳지만 다형성을 위해 인터페이스를 재사용하는 경우에는 상속과 합성을 함께 조합해서 사용할 수 밖에 없다.
객체지향에서 가장 중요한 것은 역할, 책임, 협력이다.

 
 
 
 
 
 

728x90
반응형