메서드 시그니처를 신중히 설계하라
1. 메서드 이름을 신중히 짓자.
- 표준 명명 규칙을 따라야 이해할 수 있다.
- 같은 패키지에 속한 다름 이름들과 일관되게 이름을 짓자
- 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하자
- 애매하면 자바 라이브러리의 API 가이드를 참조하라
2. 편의 메서드를 너무 많이 만들지 말자.
- 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고,, 유지보수하기 어렵다
- 아주 자주 쓰일 경우에만 별도의 약칭 메서드를 두자. 확신이 서지 않으면 만들지 말자
3. 매개변수 목록은 짧게 유지하자.
- 4개 이하가 좋다
[과하게 긴 매개변수 목록을 짧게 줄여주는 세 가지 방법]
- 여러 메서드로 쪼개고 메서드 각각은 원래 매개변수 목록의 부분집합을 받는다.
ex ) 지정된 범위의 부분리스트에서의 인덱스를 찾는 경우 List 인터페이스는 부분리스트를 반환하는 subList 메서드와 주어진 원소의 인덱스를 알려주는 indexOf 메서드를 별도로 제공한다. 이 두 가지 메서드를 이용하여 원하는 목적을 이룰 수 있다. - 매개변수 여러 개를 묶어주는 도우미 클래스를 만든다.
ex ) 카드의 숫자(rank)와 무늬(suit)를 뜻하는 두 매개변수를 항상 같은 순서로 전달하는 메서드가 있으면 이 둘을 묶는 도우미 클래스를 만들어 하나의 매개변수로 주고 받을 수 있다. - 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용한다. 모든 매개변수를 하나로 추상화한 객체를 정의하고, 클라이언트에서 이 객체의 세터 메서드를 호출해 필요한 값을 설정하게 한다.
4. 매개변수 타입으로는 클래스보다는 인터페이스가 더 낫다.
인터페이스(Map)을 사용하면 HashMap, TreeMap 등 어떤 Map 구현체도 인수로 건넬 수 있다.
5. boolean보다는 원소 2개짜리 열거 타입이 낫다. (메서드 이름상 boolean을 받아야 의미가 더 명확할 때는 예외다)
public enum TemperatureScale { FAHRENHEIT, CELSIUS }
Thermometer.newInstance(true) 보다 Thermometer.newInstance(TemperatureScale.CELSIUS)가 훨씬 명확히 알려준다. 또한 새로운 열거 타입을 휩게 추가할 수 있다.