-
[Effective Java] Item 51. 메서드 시그니처를 신중히 설계하라Java/Effective Java 2020. 10. 13. 23:39반응형
좋은 메서드 시그니처를 설계하는 방법
메서드 이름을 신중히 짓자
항상 표준 명명 규칙을 따르는 것이 좋습니다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표입니다. 그다음 목표는 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하는 것입니다. 긴 이름은 하는 것이 좋습니다.
편의 메서드를 너무 많이 만들지 말자
모든 메서드는 각각 자신의 소임을 다해야 합니다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵습니다. 인터페이스도 마찬가지입니다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 합니다. 아주 자주 쓰일 경우에만 별도의 약칭 메서드를 두되, 확신이 서지 않으면 만들지 않는 것이 좋습니다.
매개변수 목록은 짧게 유지하자
4개 이하가 좋습니다. 4개가 넘어가면 매개변수를 전부 기억하기 쉽지 않습니다. 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 해롭습니다. 사용자가 매개변수 순서를 기억하기 어려울뿐더러, 실수로 순서를 바꿔 입력해도 그대로 컴파일되고 실행될 위험이 있습니다.
과하게 긴 매개변수 목록을 짧게 줄이는 방법
- 여러 메서드로 쪼개고, 쪼개진 메서드 각각은 원래 매개변수 목록의 부분집합을 받도록 합니다.
- 매개변수 여러 개를 묶어주는 도우미 클래스를 만듭니다. 일반적으로 이런 도우미 클래스는 정적 멤버 클래스로 둡니다. 특히 잇따른 매개변수 몇 개를 독립된 하나의 개념으로 볼 수 있을 때 추천하는 기법입니다.
- 앞서의 두 기법을 혼합한 것으로, 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용합니다. 이 기법은 매개변수가 많고, 그중 일부는 생략해도 괜찮을 때 좋습니다.
매개변수의 타입으로는 클래스보다는 인터페이스가 더 낫다
매개변수로 적합한 인터페이스가 있다면 (이를 구현한 클래스가 아닌) 그 인터페이스를 직접 사용하는 것이 좋습니다. 인터페이스 대신 클래스를 사용하면 클라이언트에게 특정 구현체만 사용하도록 제한하는 꼴이며, 혹시라도 입력 데이터가 다른 형태로 존재한다면 명시한 특정 구현체의 객체로 옮겨 담느라 비싼 복사 비용을 치러야 합니다.
boolean보다는 원소 2개짜리 열거 타입이 낫다 (메서드 이름상 voolean을 받아야 의미가 더 명확할 때는 예외)
열거 타입을 사용하면 코드를 읽고 쓰기가 더 쉬워집니다. 나중에 선택지를 추가하기도 쉽습니다.
참고자료
이펙티브 자바 3/E - 교보문고
자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브러리의 최신 기능을 십분 활용하도록 내용 전반을 철�
www.kyobobook.co.kr
반응형'Java > Effective Java' 카테고리의 다른 글
[Effective Java] Item 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) 2020.10.15 [Effective Java] Item 53. 가변인수는 신중히 사용하라 (0) 2020.10.14 [Effective Java] Item 50. 적시에 방어적 복사본을 만들라 (0) 2020.10.09 [Effective Java] Item 49. 매개변수가 유효한지 검사하라 (0) 2020.10.07 [Effective Java] Item 48. 스트림 병렬화는 주의해서 적용하라 (0) 2020.09.30