런타임노트

[오브젝트] 45일차. 558-573pg | 가변성 규칙, 공변성, 반공변성, 무공변성 본문

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

[오브젝트] 45일차. 558-573pg | 가변성 규칙, 공변성, 반공변성, 무공변성

D269 2023. 8. 23. 18:51
728x90

 

45일차.


오브젝트: 코드로 이해하는 객체지향 설계[8주차_수요일]
558-573pg

 
 

#요약

 **APPENDIX. 계약에 의한 설계**

01. 협력과 계약

02. 계약에 의한 설계

03. 계약에 의한 설계와 서브타이핑

1) 계약 규칙

2) 가변성 규칙

- 부모 클래스보다 못한 자식 클래스는 서브타입이 아니다.

- 서브타이핑과 공변성, 반공변성 사이의 관계

- S가 T의 서브타입일 때 공변성, 반공변성, 무공변성

   . 공변성 : S와 T사이 서브타입 관계가 그대로 유지됨

   . 반공변성 : S와 T사이 서브타입 관계가 역전됨

   . 무공변성 : S와 T사이에는 아무런 관계도 없음

- 공변성과 반공변성의 영역으로 들어서려면 타입의 관계가 아니라 메서드의 리턴 타입과 파라미터 타입에 초점을 맞춰야 한다.

 

- 리턴 타입 공변성 : 부모 클래스에서 구현된 메서드를 자식 클래스에서 오버라이딩할 때 부모 클래스에서 선언한 반환타입의 서브타입으로 지정할 수 있는 특성, 메서드를 구현한 클래스의 타입 계층 방향과 리턴 타입의 타입 계층 방향이 동일한 경우.

- 리턴 타입 공변성은 계약에 의한 설계 관점에서 계약을 위반하지 않는다.

- 공변성과 반공변성의 지원 여부는 언어에 따라 다르다. 자바에서는 파라미터 반공변성을 허용하지 않는다ㅏ.

 

- 파라미터 타입 반공병성, 부모 클래스에서 구현된 메서드를 자식 클래스에서 오버라이딩할 때 파라미터 타입을 부모 클래스에서 사용한 파라미터의 슈퍼타입으로 지정할 수 있는 특성, 메서드를 정의한 클래스의 타입 계층과 파라미터 타입 계층의 방향이 반대인 경우 서브타입 관계를 만족한다.

- 파라미터 타입 반공변성은 계약에 의한 설계 관점에서 계약을 위반하지 않는다.

- 서브타입은 슈퍼타입에서 정의한 것보다 더 강력한 사전조건을 정의할 수는 없지만 사전조건을 완화할 수는 있다.

- 사실 객체지향 언어에서 파라미터 반공변성을 지원하는 언어는 거의 없다.

 

3) 함수 타입과 서브타이핑

- 객체의 서브타입이 슈퍼타입을 대체할 수 있는 것처럼 서브타입 메서드가 슈퍼타입 메서드를 대체할 수 있다.

- 파라미터 타입이 반공변성을 가지고, 리턴 타입이 공변성을 가지면 메서드가 오버라이드 가능한데, 오버라이드 가능하다는 것 은 메서드가 대체 가능하며, 따라서 두 메서드 사이에 서브 타이핑 관계가 존재한다는 것이다.

 

 


 **APPENDIX B. 타입계층의 구현**

- 타입 =/= 클래스, 타입은 개념의 분류를 의미, 클래스는 타입을 구현하는 한 가지 방법일 뿐.

 

 

 

 

 

 

 

728x90
반응형