[Effective Java] 아이템51 - 메서드 시그니처를 신중히 설계하라
API 설계 요령들에 대해 살펴본다!
메서드 이름은 신중히 짓자
항상 표준 명명 규칙을 따라야 한다. 자바 라이브러리의 API 가이드를 참조하는 것이 좋다. (구글 코딩 가이드)
편의 메서드를 너무 많이 만들지 말자
메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 인터페이스도 마찬가지로 메서드가 너무 많으면 구현하는 사람이 너무 고통스럽다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 한다.
매개변수 목록은 짧게 유지하자
4개 이하가 좋다. 같은 타입의 매개변수가 여러 개 연달아 나오는 경우 더 헷갈린다. 과하게 긴 매개변수 목록을 짧게 줄여주는 기술 세 가지를 소개한다.
여러 메서드로 쪼갠다.
공통적이 없는 기능들이 잘 분리되어 있다면 (직교성) 오히려 메서드 수를 줄여주는 효과가 있다. 예를 들어, 리스트에서 주어진 원소의 인덱스를 찾아야 하는데, 전체 리스트가 아니라 지정된 범위의 부분리스트에서의 인덱스를 찾는다고 해보자. 이 기능을 하나의 메서드로 구현하려면 총 3개의 매개변수가 필요하다.
- 부분리스트의 시작
- 부분리스트의 끝
- 찾을 원소
그런데, List 인터페이스는 부분리스트를 반환하는 subList
메서드 와 indexOf
메서드를 별개로 제공한다. 이 두 메서드를 통해 원하는 바를 이뤄낼 수 있다.
매개변수 여러개를 묶어주는 도우미 클래스
심플하게 class 파일 하나에 필요한 매개변수들을 담는 것이다. (아래 예제에서 Operation)
public class Calculator {
public class Operation{
int x;
int y;
}
}
빌더 패턴
(아마 거의 모든 웹개발자가 실무에서 쓰는 형식이다.) dto를 하나 만들고, 안에 내용들을 담고 그 dto를 전달하는 것이다.
매개변수의 타입으로는 클래스보다 인터페이스가 낫다.
매개변수로 적합한 인터페이스가 있다면 그 인터페이스를 직접 사용하자. 유연하게 구현할 수 있다.
boolean 보다는 원소 2개짜리 열거타입이 낫다.
public enum TemperatureScale {FAHRENHEIT, CELSIUS}
Thermometer.newInstnace(true) 보다는 Thermometer.newInstnace(TemperatureScale.CELSIUS) 가 더 직관적이다.
클린코드 책을 한번 보는 것도 나쁘지 않겠다.
댓글남기기