정적 팩토리 메서드
객체의 인스턴스를 반환하는 메소드로 생성자처럼 사용된다.
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
정적 팩토리 메소드를 사용했을 때의 장점
- 다른 타입의 객체를 반환할 수 있고, 메소드 이름으로 반환될 객체의 특성을 설명할 수 있다.
- from : 매개변수 1개를 받아서 해당 타입의 인스턴스를 반환하는 메소드
- of : 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 메소드
static <E> List<E> of(E e1, E e2) { return new ImmutableCollections.List12<>(e1, e2); } List<String> list = List.of(a, b, c);
- valueOf : 여러 매개변수를 받아, 해당 타입의 인스턴스를 반환하는 메소드
Integer number = Integer.valueOf(123);
- getInstance : 인스턴스가 없다면 생성하고, 이미 생성되어 있다면 그 인스턴스를 반환하는 메소드
public static A getInstance(){ if (instance == null) { instance = new A(); } return instance; }
- newInstance : 매번 새로운 인스턴스를 반환하는 메소드
public static A newInstance(){ return new A(); }
- get[Type]
Set<Object> emptySet = Collections.emptySet(); Map<Object, Object> emptyMap = Collections.emptyMap();
- 호출할 때마다 인스턴스를 새로 생성하지 않을 수 있다.
- 입력 매개변수가 같더라도, 다른 클래스의 객체를 반환할 수 있다.
Optional<T> value = Optional.ofNullable(T value); Optional<T> value = Optional.of(T value);
빌더 패턴
생성자에 매개변수가 많다면 빌더를 사용해보자.
public class Abcd {
private final int a;
private final int b;
private final int c;
private final int d;
public static Builder builder(int a, int b) {
return new Builder(a, b);
}
public Abcd(Builder builder) {
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
this.d = builder.d;
}
public static class Builder {
// 필수 매개변수
private final int a;
private final int b;
// 선택 매개변수
private int c;
private int d;
public Builder(int a, int b) {
this.a = a;
this.b = b;
}
public Builder setC(int c) {
this.c = c;
return this;
}
public Builder setD(int d) {
this.d = d;
return this;
}
public Abcd build() {
return new Abcd(this);
}
}
}
Abcd abcd = Abcd.builder(1,2)
.setC(3)
.setD(4)
.build();
'JAVA > JAVA' 카테고리의 다른 글
Enum, EnumSet, EnumMap (0) | 2023.07.11 |
---|---|
I/O (0) | 2022.02.06 |
인터페이스 (0) | 2021.11.30 |
Optional (0) | 2021.11.07 |
스트림 Stream (0) | 2021.11.07 |