Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

부록A . 계약에 의한 설계 #31

Open
youngvly opened this issue Dec 12, 2021 · 0 comments
Open

부록A . 계약에 의한 설계 #31

youngvly opened this issue Dec 12, 2021 · 0 comments
Assignees
Labels

Comments

@youngvly
Copy link
Owner

youngvly commented Dec 12, 2021

#21 관련

부수효과를 명시적으로

  • 인터페이스만ㅇ드로 협력을 위해 필요한 약속과 제약은 전달할 수 없어 암시적으로 남게된다.
  • if 문과의 차이점은, 문서화가 가능하고, 비즈니스로직과 분리될 수 있다. (계약에 의한 설계 개념을 지원하는 라이브러리나 언어)

    java의 assert문이 exception 이 던져져서 복잡하다 생각했는데, 가독성측면에서 비즈니스로직과 분리되는 장점이 크겠구나

  • 사전조건
  • 사후조건
    • 용도
      • 인스턴스 변수의 상태가 올바른지 서술하기 위해
      • 메서드에 전달된 파라미터의 값이 올바르게 변경되었는지를 서술하기 위해
      • 반환값이 올바른지를 서술하기 위해
  • 불변식 : 인스턴스 생명주기 전반에 걸쳐 지켜져야하는 규칙.
    • 불변식은 생성자 실행후, 메서드 실행전, 메서드 실행후 모두 호출되어야한다.

서브타이핑

  • 서브타입에 더 강력한 사전조건을 정의할 수 없다.
  • 서브타입에 더 완화된 사후조건을 정의할 수 없다.
  • 슈퍼타입의 불변식은 서브타입에서도 반드시 유지되어야 한다.
  • 일찍 실패하기
    : 문제가 발생한 그 위치에서 프로그램이 실패하도록 하라. 문제의 원인을 파악할 수 있는 가장 빠른 방법은 문제가 발생하자마자 프로그램이 일찍 실패하게 만드는 것이다.

가변성 규칙

  • 서브타입은 슈퍼타입이 발생시키는 예외와 다른 타입의 예외를 발생시켜서는 안된다.
    • 부모클래스보다 못한 자식클래스는 서브타입이 아니다.
  • 서브타입의 리턴 타입은 공변성을 가져야한다.
    • 슈퍼타입 대신 서브타입을 반환하는 것은, 더 강력한 사후조건을 정의하는 것과 같다.
  • 서브타입의 메서드 파라미터는 반공변성을 가져야 한다. (java는 지원x)
    • 서브타입대신 슈퍼타입을 파라미터로 받는것은 더 약한 사후조건을 정의하는 것과 같다.
  • 단어
    • 공변성 covariance : S-T 서브타입관계가 그대로 유지된다. 서브타입인 S가 슈퍼타입인 T대신 사용될 수 있다. (=리스코프 치환원칙)
    • 반공변성 contravariance : 역전된다. 슈퍼타입인 T가 서브타입인 S대신 사용될 수 있다.
    • 무공변성 invariance : 어떤 경우도 대신 사용될 수 없다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant