[아이템 51] 메서드 시그니처를 신중히 설계하라

Jimin Lim·2023년 7월 3일
0

Effective Java

목록 보기
34/38
post-thumbnail

아이템 51

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

✅ 메서드 이름을 신중히 짓자

같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 그리고 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하자

애매하다면 자바 라이브러리의 API 가이드를 참조하라.

https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/

✅ 편의 메서드를 너무 많이 만들지 말자

편의 메서드는 말 그대로 편의를 위해 존재하는 메서드다. 예를 들면, 헬퍼 클래스인 Collections 안에 있는 모든 메서드(swap, min, max 등등...)를 말한다.

메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 힘들다.

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

4개 이하가 좋다. 매개변수 순서를 기억하기 어려울뿐더러, 실수로 순서를 바꿔 입력해도 그대로 컴파일되고 실행된다.

과하게 길다면 아래 3가지 방식으로 줄일 수 있다.

  1. 여러 메서드로 줄인다.
    예를 들어 (1) 지정된 범위의 부분리스트에서 (2) 인덱스를 찾는다고 할때 부분리스트의 시작, 부분리스트의 끝, 찾을 원소 이렇게 3개의 인자를 넘길 수 있겠지만 subList 로 시작, 끝을 입력 받고 indexOf로 찾을 원소를 입력받아 쪼갤 수 있다.

  2. 매개변수 여러개를 묶어주는 도우미 클래스를 만든다.
    Card를 예로 들때, 숫자+무늬를 합쳐 하나의 매개변수로 주고받을 수 있다.

  3. 빌더 패턴을 메서드 호출에 응용한다.
    먼저 모든 매개변수를 하나로 추상화한 객체를 정의하고, 클라이언트에서 이 객체의 세터 메서드를 호출해 필요한 값을 설정하게 하는 것이다.

✅ 매개변수의 타입으로는 클래스보다 인터페이스가 더 낫다.

에를 들어 HashMap을 넘기는 경우, Map을 대신 사용하자. 그러면 해당 인터페이스를 구현한 모든 클래스가 인수로 들어갈 수 있다. 만약 특정 구현체로 사용했다면, 인자를 제한하는 꼴이고 해당 구현체로 변환하기까지 비용이 필요하다.

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

Thermometer.newInstance(true)보다 Thermometer.newInstance(TemperatureScale.CELSIUS)가 하는 일을 훨씬 명확히 알려준다. 또한 다른 새로운 타입이 존재한다면 안에 리팩터링해 넣을 수 있다.

reference

https://github.com/woowacourse-study/2022-effective-java/blob/main/08%EC%9E%A5/%EC%95%84%EC%9D%B4%ED%85%9C_51/%EB%A9%94%EC%84%9C%EB%93%9C_%EC%8B%9C%EA%B7%B8%EB%8B%88%EC%B2%98%EB%A5%BC_%EC%8B%A0%EC%A4%91%ED%9E%88_%EC%84%A4%EA%B3%84%ED%95%98%EB%9D%BC.md

profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글