// 기존 메서드
public void method(int a, String b, String c, double d) {
// do something
}
// Helper 클래스 생성
class Helper {
int a;
String b;
String c;
double d;
}
public void someMethod(Helper helper) {
// do something
}
1,2 두 기법을 혼합한 것으로 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용
매개변수가 많을 때, 그 중 일부는 생략해도 괜찮을 때 사용
모든 매개변수를 하나로 추상화한 객체 정의
클라이언트에서 이 객체의 Setter 메서드 호출 (매개변수 하나 혹은 서로 연관된 몇 개만)
필요한 값 설정
execute 메서드를 호출해 앞서 설정한 매개변수 유효성 검사
설정 완료된 객체 넘김
매개변수 타입으로는 클래스보다 인터페이스
메서드에 HashMap을 넘길 일은 전혀 없음
대신 Map 사용.
HashMap 뿐 아니라 TreeMap, ConcurrentHashMap, TreeMap의 부분맵 등 어떤 구현체도 가능
아직 존재하지 않는 Map도 가능
클래스를 사용하면, 특정 구현체만 사용하도록 제한하는 꼴
입력 데이터가 다른 형태로 존재하면, 특정 구현체의 객체로 옮겨 담아야 함.
boolean 보다는 원소 2개짜리 열거 타입
열거 타입을 사용하면 코드를 읽고 쓰기가 쉬워짐
선택지 추가도 쉬워짐.
화씨와 섭씨를 원소로 정의
public enum TemperatureScale{
FAHRENHEIT,
CELSIUS
}
온도계 클래스 정적 팩터리 메서드가 온도계 인스턴스 생성
Thermometer.newInstance(true) 보다 Thermometer.newInstance(TemperatureScale.CELSIUS) 가 보기 쉬움.
메서드 이름을 신중히 짓자
편의 메서드를 너무 많이 만들지 말자
메서드가 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다.
클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야 함
확신이 서지 않으면 만들지 말자.
매개변수 목록은 짧게 유지하자
매개변수는 적은게 좋음.
같은 타입의 매개변수 여러개가 연달아 나오면 최악
매개 변수 목록 줄이기
여러 메서드로 쪼갠다.
매개 변수 여러 개를 묶어주는 도우미 클래스를 만드는 것이다.
static member class로 만듬
카드게임 예시
1,2 두 기법을 혼합한 것으로 객체 생성에 사용한 빌더 패턴을 메서드 호출에 응용
매개변수 타입으로는 클래스보다 인터페이스
boolean 보다는 원소 2개짜리 열거 타입
열거 타입을 사용하면 코드를 읽고 쓰기가 쉬워짐
선택지 추가도 쉬워짐.
화씨와 섭씨를 원소로 정의
온도계 클래스 정적 팩터리 메서드가 온도계 인스턴스 생성
Thermometer.newInstance(true)
보다Thermometer.newInstance(TemperatureScale.CELSIUS)
가 보기 쉬움.추후 캘빈온도도 지원해야하면, 열거타입에만 추가.
온도 단위에 대한 의존성을 개별 열거 타입 상수의 메서드 안으로 넣을 수도 있음.