1. 영화 예매 시스템
2. 객체지향 프로그래밍을 향해
- 협력, 객체, 클래스
· 어떤 객체들이 필요한지 (어떤 클래스가 필요한지 보다) 먼저 고민하라.
· 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.
- 자율적인 객체(상태는 숨기고 행동만 외부에 공개)
· 캡슐화: 데이터와 기능을 객체 내부로 함께 묶는 것
· 접근제어: public protected, private 등 접근 수정자 제공
· public interface: 외부에서 접근 가능한 부분
· implementation(구현): 외부 접근 불가, 내부만 접근 가능
- 프로그래머의 자유
· 클라이언트 프로그래머에게 필요한 부분만 공개하여, 불필요한 접근을 방지한다.
. 클라이언트 프로그래머가 알아야 할 지식의 양이 줄어든다.(내부 구현)
· public 영역을 변경하지 않는 범위 내에서 코드 수정이 자유로움.
=> 인터페이스와 구현을 깔끔하게 분리하기 위해 노력 필요
- 협력하는 객체들의 공동체
- 협력에 관한 짧은 이야기
3. 할인 요금 구하기
- 할인 요금 계산을 위한 협력 시작하기
- 할인 정책과 할인 조건
· Template Method 패턴: 부모 클래스에 기본적인 알고리즘 구현, 중간에 필요한 처리를 자식 클래스에게 위임.
. 오버라이딩: 메서드 이름 동일, 파라미터 동일
. 오버로딩: 메서드 이름 동일, 파라미터 상이 => 각각의 메서드가 공존하고, 파라미터에 따라 다른 메서드 호출.
4. 상속과 다형성
- 컴파일 시간 의존성과 실행 시간 의존성
· 코드의 의존성과 실행시점의 의존성이 다를 수 있다.
· 두가지가 다를 경우 코드를 이해하기 어려워짐 => 더 유연해지고 확장 가능해짐 (트레이드오프 필요)
- 차이에 의한 프로그래밍
· 부모클래스와 다른 부분만을 추가해서 새로운 클래스를 쉽고 빠르게 만드는 방법
- 상속과 인터페이스
· 상속이 가치있는 이유는 부모 클래스가 제공하는 모든 인터페이스를 자식 클래스가 물려받을 수 있기 때문
=> 업캐스팅 가능
· 다형성
=> Movie는 동일한 메시지를 전송하지만, 실제 실행되는 메서드는 메시지를 수신하는 객체의 클래스에 의존
(실행시간 의존성)
=> 지연바인딩(Lazy binding) or 동적 바인딩(dynamic binding)
<=> 초기바인딩(early binding) or 정적바인딩(static binding)
=> 구현 상속 / 인터페이스 상속: 단순 코드(구현) 만 재사용할 목적으로 상속을 하면 변경에 취약한 코드 생산
=> 인터페이스 상속을 추구해야 함.
5. 추상화와 유연성
- 추상화의 힘
· 요구정책을 높은 수준에서 서술할 수 있다.
· 설계가 좀 더 유연해진다. 기존 구조를 수정하지 않고도 새로운 기능을 쉽게 만들 수 있다.
=> 유연성이 필요한 곳에 추상화를 사용하라.
- 유연한 설계
- 추상 클래스와 인터페이스 트레이드오프
- 코드 재사용
- 상속
· 캡슐화를 위반한다.
· 유연하지 않다.
- 합성
· 인터페이스에 정의된 메시지를 통해서만 코드를 재사용하는 방법
'독서 > Javascript' 카테고리의 다른 글
오브젝트 - 4. 설계 품질과 트레이드오프 (0) | 2021.08.09 |
---|---|
오브젝트 - 3. 역할, 책임, 협력 (0) | 2021.08.09 |
오브젝트 - 1.객체, 설계 (0) | 2021.08.08 |