개발의변화
자바이펙티브 1. 팩토리 메서드 패턴 본문
반응형
정적 팩토리 메서드(static factory method)
클래스의 인스턴스를 반환하는 단순한 정적 메서드
public static Boolan valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE
}
public static LocalTime of(int hour, int minute) {
ChronoField.HOUR_OF_DAY.checkValidValue((long)hour);
if (minute == 0) {
return HOURS[hour];
} else {
ChronoField.MINUTE_OF_HOUR.checkValidValue((long)minute);
return new LocalTime(hour, minute, 0, 0);
}
}
- 이름을 가질 수 있다.
생성자에 넘기는 매개변수와 생성자 자체만으로 반환될 객체의 특성을 제대로 설명X
정적 팩토로 이름을 잘 지으면 객체의 특성 묘사 쉬워짐 - 호출될 떄마다 인스턴스를 새로 생성하지 않아도 된다.
불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성 피할 수 있음
반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 클래스는 언제 어느 인스턴스를 살아 있게 할지를 철저히 통제 가능
인스턴스를 통제하면 클래스를 싱글턴, 인스턴스화 불가로 만들 수 있다.
- 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
구현 클래스를 공개하지 않고도 그 객체를 반환할 수 있어 API를 작게 유지가능
자바 8부터 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀렸기 때문에 인스턴스화 불가 동반 클래스를 둘 이유가 없다. - 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환
반환 타입의 하위 타입이기만 하면 어떤 클래스의 객체를 반환할 수 있다. - 정적 팩토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
from: 매개 변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드
of: 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드
valueOf: from과 of의 더 자세한 버전
instance 혹은 getInstance: 매개변수로 명시한 인스턴스를 반환, 같은 인스턴스를 보장하지는 않는다.
create 혹은 newIncstance:aoqjs 매번 새로운 인스턴스를 생성해 반환함을 보장
getType: getInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 메서드를 정의할 때 쓴다.
newType: 다른 클래스에 팩터리 메서드 정의할 떄 사용
반응형