51. 메서드 시그니처를 신중히 설계하라

신명철·2022년 3월 17일
0

Effective Java

목록 보기
49/80

메서드 이름을 신중히 짓자

항상 표준 명명 규칙을 따라야 한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 그 다음은 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것이다. 긴 이름은 피하자. 애매하면 자바 라이브러리의 API 가이드를 참조하라

편의 메서드를 너무 많이 만들지 마라

메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 인터페이스도 마찬가지다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 한다. 아주 자주 쓰일 때만 별도의 약칭 메서드를 두기 바란다. 확신이 서지 않으면 만들지 말자.

매개변수 목록은 짧게 유지하자

4개 이하가 좋다. 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 해롭다. 실수로 순서를 바꿔서 입력해도 그대로 컴파일되고 실행된다. 다음은 매개변수 목록을 줄이는 방법이다.

1. 여러 메서드로 쪼갠다.

쪼개진 메서드 각각이 원래 매개변수 목록의 부분집합을 받는다. 잘못하면 메서드가 너무 많아질 수 있지만 직교성을 높여 오히려 메서드 수를 줄여주는 효과도 있다. 예를 들어 전체리스트의 지정된 범위의 부분리스트에서 인덱스를 찾아야 할 때, 보통 3개의 매개변수(시작, 끝, 찾을 원소)가 필요하다. 그런데 java.util.List는 subList와 indexOf 메서드를 별개로 제공해 매개변수를 줄인다. 강함과 유연함이 절묘하게 균형을 이룬 API가 만들어진 것이다.

2. 매개변수 여러 개를 묶어주는 도우미 클래스를 만든다.

일반적으로 이런 도우미 클래스는 정적 멤버 클래스[아이템24]로 둔다. 특히 잇따른 매개변수 몇 개를 독립된 하나의 개념으로 볼 수 있을 때 추천하는 기법이다. 도우미 클래스를 통해 독립된 개념을 가진 매개변수를 받는다면 내부 구현도 깔끔해진다.

3. 빌더 패턴을 고려하자

이 기법은 매개변수가 많을 때, 특히 그중 일부는 생략되도 괜찮을 때 도움이 된다. 모든 매개변수를 하나로 추상화한 객체를 정의하고, 클라이언트에서 이 객체의 세터를 호출해 필요한 값을 설정하게 하는 것이다. 이때 각 세터 메서드는 매개변수 하나 혹을 서로 연관된 몇 개만 설정하게 한다.

매개변수 타입으로 클래스보다 인터페이스가 낫다

매개변수로 적합한 인터페이스가 있다면 그 인터페이스를 직접 사용하자. 클래스를 사용하면 특정 구현체만 사용하는 꼴이지만, 인터페이스를 사용하면 해당 인터페이스의 하위 타입도 모두 사용할 수 있다.

boolean보다 원소 2개짜리 열거 타입이 낫다

boolean을 받아야 의미가 더 명확할 때를 제외한다면 열거 타입이 boolean보다 읽고 쓰기가 더 쉬워진다. 나중에 선택지를 추가할 때도 더 편하다.

public enum TemperatureScale {
	FAHERNHEIT, CELSIUS;
}
profile
내 머릿속 지우개

0개의 댓글