Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발의변화

자바이펙티브 1. 팩토리 메서드 패턴 본문

카테고리 없음

자바이펙티브 1. 팩토리 메서드 패턴

refindmySapporo 2024. 2. 8. 20:01
반응형

정적 팩토리 메서드(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);
  }
}
  1. 이름을 가질 수 있다.
    생성자에 넘기는 매개변수와 생성자 자체만으로 반환될 객체의 특성을 제대로 설명X
    정적 팩토로 이름을 잘 지으면 객체의 특성 묘사 쉬워짐
  2. 호출될 떄마다 인스턴스를 새로 생성하지 않아도 된다.
    불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성 피할 수 있음

        반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 클래스는 언제 어느 인스턴스를 살아 있게 할지를 철저히 통제 가능
        인스턴스를 통제하면 클래스를 싱글턴, 인스턴스화 불가로 만들 수 있다.

  1. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
    구현 클래스를 공개하지 않고도 그 객체를 반환할 수 있어 API를 작게 유지가능
    자바 8부터 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀렸기 때문에 인스턴스화 불가 동반 클래스를 둘 이유가 없다.
  2. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환
    반환 타입의 하위 타입이기만 하면 어떤 클래스의 객체를 반환할 수 있다.
  3. 정적 팩토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.

from: 매개 변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드
of: 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드
valueOf: from과 of의 더 자세한 버전
instance 혹은 getInstance: 매개변수로 명시한 인스턴스를 반환, 같은 인스턴스를 보장하지는 않는다.
create 혹은 newIncstance:aoqjs 매번 새로운 인스턴스를 생성해 반환함을 보장
getType: getInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 메서드를 정의할 때 쓴다.
newType: 다른 클래스에 팩터리 메서드 정의할 떄 사용

반응형