아이템 29. 사용할 때는 너그럽게, 생성할 때는 엄격하게

아이템 29. 사용할 때는 너그럽게, 생성할 때는 엄격하게

아이템 29. 사용할 때는 너그럽게, 생성할 때는 엄격하게 #

" 아이템 29의 제목은 TCP 관련해서 존 포스텔이 쓴 견고성 원칙(포스텔의 법칙)에서 따왔습니다. “

” TCP 구현체는 견고성의 일반적 원칙을 따라야 한다. 당신의 작업은 엄격하게 하고, 다른 사람의 작업은 너그럽게 받아들여야 한다. “

함수의 시그니처에도 비슷한 규칙을 적용해야 한다. #

함수의 매개변수는 타입의 범위가 넓어도 되지만,
결과를 반환할 때는 일반적으로 타입의 범위가 더 구체적이어야 한다.

어떤 함수의 반환타입의 범위가 넓으면 사용하기 불편하다.

사용하기 편리한 API일수록 반환 타입이 엄격하다.

예시 생략

어쩔 수 없이 다양한 타입을 허용해야 하는 경우가 생길 수 있다.

다만 이때도 나쁜 설계일 수 있다는 것을 인지해야 한다.



요약 & 정리 #

  • 기본 형태(반환 타입)와 느슨한 형태(매개변수 타입)를 도입하는 것이 좋다.
  • 매개변수 타입은 반환 타입에 비해 범위가 넓은 경향이 있다.
    • 선택적 속성과 유니온 타입은 반환 타입보다 매개변수 타입에 더 일반적이다.