메서드 시그니처를 신중히 설계하라
같은 패키지에 속한 다른 이름들과 일관되게 짓는 게 최우선 목표다. 그리고 개발자 커뮤니티에서 널리 받아들여지는 이름을 사용하자
애매하다면 자바 라이브러리의 API 가이드를 참조하라.
https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/
편의 메서드는 말 그대로 편의를 위해 존재하는 메서드다. 예를 들면, 헬퍼 클래스인 Collections 안에 있는 모든 메서드(swap, min, max 등등...)를 말한다.
메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 힘들다.
4개 이하가 좋다. 매개변수 순서를 기억하기 어려울뿐더러, 실수로 순서를 바꿔 입력해도 그대로 컴파일되고 실행된다.
과하게 길다면 아래 3가지 방식으로 줄일 수 있다.
여러 메서드로 줄인다.
예를 들어 (1) 지정된 범위의 부분리스트에서 (2) 인덱스를 찾는다고 할때 부분리스트의 시작, 부분리스트의 끝, 찾을 원소 이렇게 3개의 인자를 넘길 수 있겠지만 subList 로 시작, 끝을 입력 받고 indexOf로 찾을 원소를 입력받아 쪼갤 수 있다.
매개변수 여러개를 묶어주는 도우미 클래스를 만든다.
Card를 예로 들때, 숫자+무늬를 합쳐 하나의 매개변수로 주고받을 수 있다.
빌더 패턴을 메서드 호출에 응용한다.
먼저 모든 매개변수를 하나로 추상화한 객체를 정의하고, 클라이언트에서 이 객체의 세터 메서드를 호출해 필요한 값을 설정하게 하는 것이다.
에를 들어 HashMap을 넘기는 경우, Map을 대신 사용하자. 그러면 해당 인터페이스를 구현한 모든 클래스가 인수로 들어갈 수 있다. 만약 특정 구현체로 사용했다면, 인자를 제한하는 꼴이고 해당 구현체로 변환하기까지 비용이 필요하다.
Thermometer.newInstance(true)
보다 Thermometer.newInstance(TemperatureScale.CELSIUS)
가 하는 일을 훨씬 명확히 알려준다. 또한 다른 새로운 타입이 존재한다면 안에 리팩터링해 넣을 수 있다.