런타임노트

[오브젝트] 47일차. 588-603pg | 덕 타이핑, 믹스인, 동적모델, 정적모델 본문

책책책 책을 읽읍시다‼ ver.개발/[ 오브젝트: 코드로 이해하는 객체지향 설계 ]

[오브젝트] 47일차. 588-603pg | 덕 타이핑, 믹스인, 동적모델, 정적모델

D269 2023. 8. 25. 15:04
728x90

 

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) 행동이 코드를 결정한다.

- 협력에 참여하는 객체의 행동이 객체의 정적 모델을 결정해야 한다.

 

 

 

 

 

 

 

728x90
반응형