아이템 29. 사용할 때는 너그럽게, 생성할 때는 엄격하게 #
" 아이템 29의 제목은 TCP 관련해서 존 포스텔이 쓴 견고성 원칙(포스텔의 법칙)에서 따왔습니다. “
” TCP 구현체는 견고성의 일반적 원칙을 따라야 한다. 당신의 작업은 엄격하게 하고, 다른 사람의 작업은 너그럽게 받아들여야 한다. “
함수의 시그니처에도 비슷한 규칙을 적용해야 한다. #
함수의 매개변수는 타입의 범위가 넓어도 되지만,
결과를 반환할 때는 일반적으로 타입의 범위가 더 구체적이어야 한다.
어떤 함수의 반환타입의 범위가 넓으면 사용하기 불편하다.
사용하기 편리한 API일수록 반환 타입이 엄격하다.
예시 생략
어쩔 수 없이 다양한 타입을 허용해야 하는 경우가 생길 수 있다.
다만 이때도 나쁜 설계일 수 있다는 것을 인지해야 한다.
요약 & 정리 #
- 기본 형태(반환 타입)와 느슨한 형태(매개변수 타입)를 도입하는 것이 좋다.
- 매개변수 타입은 반환 타입에 비해 범위가 넓은 경향이 있다.
- 선택적 속성과 유니온 타입은 반환 타입보다 매개변수 타입에 더 일반적이다.