-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
#21 관련
부수효과를 명시적으로
- 인터페이스만ㅇ드로 협력을 위해 필요한 약속과 제약은 전달할 수 없어 암시적으로 남게된다.
- if 문과의 차이점은, 문서화가 가능하고, 비즈니스로직과 분리될 수 있다. (계약에 의한 설계 개념을 지원하는 라이브러리나 언어)
java의
assert문이 exception 이 던져져서 복잡하다 생각했는데, 가독성측면에서 비즈니스로직과 분리되는 장점이 크겠구나 - 사전조건
- 사후조건
- 용도
- 인스턴스 변수의 상태가 올바른지 서술하기 위해
- 메서드에 전달된 파라미터의 값이 올바르게 변경되었는지를 서술하기 위해
- 반환값이 올바른지를 서술하기 위해
- 용도
- 불변식 : 인스턴스 생명주기 전반에 걸쳐 지켜져야하는 규칙.
- 불변식은 생성자 실행후, 메서드 실행전, 메서드 실행후 모두 호출되어야한다.
서브타이핑
- 서브타입에 더 강력한 사전조건을 정의할 수 없다.
- 서브타입에 더 완화된 사후조건을 정의할 수 없다.
- 슈퍼타입의 불변식은 서브타입에서도 반드시 유지되어야 한다.
- 일찍 실패하기
: 문제가 발생한 그 위치에서 프로그램이 실패하도록 하라. 문제의 원인을 파악할 수 있는 가장 빠른 방법은 문제가 발생하자마자 프로그램이 일찍 실패하게 만드는 것이다.
가변성 규칙
- 서브타입은 슈퍼타입이 발생시키는 예외와 다른 타입의 예외를 발생시켜서는 안된다.
- 부모클래스보다 못한 자식클래스는 서브타입이 아니다.
- 서브타입의 리턴 타입은 공변성을 가져야한다.
- 슈퍼타입 대신 서브타입을 반환하는 것은, 더 강력한 사후조건을 정의하는 것과 같다.
- 서브타입의 메서드 파라미터는 반공변성을 가져야 한다. (java는 지원x)
- 서브타입대신 슈퍼타입을 파라미터로 받는것은 더 약한 사후조건을 정의하는 것과 같다.
- 단어
- 공변성 covariance : S-T 서브타입관계가 그대로 유지된다. 서브타입인 S가 슈퍼타입인 T대신 사용될 수 있다. (=리스코프 치환원칙)
- 반공변성 contravariance : 역전된다. 슈퍼타입인 T가 서브타입인 S대신 사용될 수 있다.
- 무공변성 invariance : 어떤 경우도 대신 사용될 수 없다.
Reactions are currently unavailable