| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 상속
- 성수핫플
- 성수볼거리
- 헤드퍼스트
- 책읽기
- IntelliJ
- 객체지향프로그래밍
- 코딩
- docker
- 성수직장인
- 책너두
- 독서
- 헤드퍼스트디자인패턴
- 독서일지
- JavaScript
- 주니어개발자
- Java
- 성수
- Linux
- 개발자
- 오브젝트
- 깨끗한코드
- 직장인
- 객체지향
- JAVA개발자
- 클린코드
- DesignPattern
- 직장인점심
- 성수맛집
- 디자인패턴
- Today
- Total
런타임노트
[오브젝트] 47일차. 588-603pg | 덕 타이핑, 믹스인, 동적모델, 정적모델 본문
[오브젝트] 47일차. 588-603pg | 덕 타이핑, 믹스인, 동적모델, 정적모델
D269 2023. 8. 25. 15:04
47일차.
오브젝트: 코드로 이해하는 객체지향 설계[8주차_금요일]
588-603pg
#요약
**APPENDIX B. 타입계층의 구현**
1) 클래스를 이용한 타입 계층 구현
2) 인터페이스를 이용한 타입 계층 구현
3) 추상 클래스를 이용한 타입 계층 구현
4) 추상 클래스와 인터페이스 결합하기
5) 덕 타이핑 사용하기
- 덕 타이핑 : 주로 동적 타입 언어에서 사용하는 방법으로, 덕 테스트(duck test)를 프로그래밍 언어에 적용한 것.
- 덕 테스트 : "어떤 새가 오리처럼 걷고, 오리처럼 헤엄치며, 오리처럼 꽥꽥 소리를 낸다면 나는 이 새를 오리라고 부를 것이다", 어떤 대상의 '행동'이 오리와 같다면 그것을 오리라는 타입으로 취급해도 무방하다는 것.
- 즉, 객체가 어떤 인터페이스에 정의된 행동을 수행할 수만 있다면 그 객체를 해당 타입으로 분류해도 문제 없다.
- 자바같은 정적 타입 언어에서는 객체의 퍼블릭 인터페이스만으로 타입을 추측하는 것이 불가능하며 모든 요소의 타입이 명시적으로 기술돼 있어야 한다.
- 루비같은 동적 타입 언어에서는 명시적으로 동일한 클래스를 상속받거나 동일한 인터페이스를 구현하지 않더라도 시그니처가 동일한 메서드를 가진 클래스는 같은 타입으로 취급할 수 있다.
- 덕 타이핑은 타입이 행동에 대한 것이라는 사실 강조
- 두 객체가 동일하게 행동하면 타입 관점에서 두 객체는 동일한 타입인 것이다.
- 덕 타이핑 단점 : 컴파일 시점에 발견할 수 있는 오류를 실행 시점으로 미루게 되기 때문에 설계의 유연성을 얻는 대신 코드의 안전성을 약화시킬 수 있다는 점
6) 믹스인과 타입 계층
- 믹스인 : 객체를 생성할 때 코드 일부를 섞어 넣을 수 있도록 만들어진 일종의 추상 서브클래스.
- 사용 목적 : 다양한 객체 구현 안에서 동일한 '행동'을 중복 코드 없이 재사용할 수 있게 만드는 것.
- 공통의 행동이 믹스인된 객체들은 동일한 메시지를 수신할 수 있는 퍼블릭 인터페이스를 공유하게 되는 것이다.
- 인터페이스에 메서드의 기본 구현 추가를 허용하는 것 : 자바8에 새롭게 추가된 디폴트 메서드(default method)
- 디폴트 메서드 단점 : 외부에 노출할 필요가 없는 메서드를 불필요하게 퍼블릭 인터페이스에 추가하는 결과를 낳게 됨으로써 인터페이스가 비대해지고 캡슐화가 약화될 수도 있음
- 어떤 타입이 다른 타입의 서브타입이 되기 위해서는 구현할 때 리스코프 치환 원칙을 준수해야 한다.
**APPENDIX C. 동적인 협력, 정적인 코드**
- 동적 모델(dynamic model) : 프로그램 실행 구조를 표현하는 움직이는 모델
- 정적 모델(static model) : 코드의 구조를 담는 고정된 모델
- 객체지향에서 동적 모델은 객체와 협력으로 구성된다.
- 객체지향에서 정적 모델은 타입과 관계로 구성된다.
- 정적 모델은 동적 모델에 의해 주도돼야 하고 동적 모델이라는 토대 위에 세워져야 한다.
01. 동적 모델과 정적 모델
1) 행동이 코드를 결정한다.
- 협력에 참여하는 객체의 행동이 객체의 정적 모델을 결정해야 한다.
'책책책 책을 읽읍시다‼ ver.개발 > [ 오브젝트: 코드로 이해하는 객체지향 설계 ]' 카테고리의 다른 글
| [오브젝트] 마지막 48일차. 604-615pg | 도메인 모델, 분석모델, 설계모델, 구현모델 (0) | 2023.08.27 |
|---|---|
| [오브젝트] 46일차. 574-587pg | 사용자 정의 타입, 골격 구현 추상 클래스 (0) | 2023.08.25 |
| [오브젝트] 45일차. 558-573pg | 가변성 규칙, 공변성, 반공변성, 무공변성 (0) | 2023.08.23 |
| [오브젝트] 44일차. 547-557pg | 리스코프 치환원칙-계약규칙 (0) | 2023.08.23 |
| [오브젝트] 43일차. 538-546pg | 계약에 의한 설계, 사전조건, 사후조건, 불변식 (0) | 2023.08.21 |