정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋다. 그렇다고 하더라고 정적 팩터리를 사용하는 게 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자.
어떤 역할의 객체 생성인지 명시 가능
값이 소스인 BigInteger를 반환
생성자 : BigInteger(int, int, Random)
정적 팩터리 매서드 : BigInteger.probablePrime(int, Random)public interface Coffee {
default String getBrandName() {
return "MEGA";
}
}
// getBrandName이 없는 DTO 클래스 생성
public class Americano implements Coffee {
private long price;
public Americano(long price) {
this.price = price;
}
}
// default 메소드에 적용되어있는 getBrandName() 메소드 사용
public class Test {
public static void main(String args[]) {
Coffee coffee = new Americano();
System.out.println(coffee.getBrandName());
}
}참고 - 인터페이스에 대한 설명
https://wedul.site/320
https://m.blog.naver.com/heartflow89/220969525191
— 다시
from
— 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 매서드
Date d = Date.from(instance);of
— 여러 매개변수를 받아 적합한 타입으 ㅣ인스턴스를 반환하는 집계 메서드
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);valueOf
— from과 of의 더 자세한 버전
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);instance 혹은 getInstance
— 매개변수를 받는다면, 매개변수로 명시한 인스턴스를 반환하지만, 같은 인스턴스임을 보장하지 않음
StackWalker luke = StackWalker.getInstance(options);create 혹은 newInstance
— instance 혹은 getInstance 와 같지만, 매번 새로운 인스턴스를 생성해 반환함을 보장한다.
Object newArray = Array.newInstance(classObject, arrayLen);getType
— getInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 매서드를 정의할 때 사용
FileStore fs = Files.getFileStore(path);newType
— newInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 매서트를 정의할 때 사용
BufferedReader br = Files.newBufferedReader(path);type
— getType과 newType의 간결한 버전
List<Complaint> litany = Collections.list(legacyLitany)