호출한 정적 메서드가 직접 객체를 만들어 반환하는 경우, 이러한 유형의 메서드를 정적 팩토리 메서드라고 한다. 정적 팩토리 메서드를 생성자 대신 사용하는데, 왜 그렇게 하는지 알아보자.
1. 정적 팩토리 메서드는 이름을 가질 수 있다. 따라서 객체를 생성할 때 명시적인 의미 전달이 가능하다.
2. 정적 팩토리 메서드는 호출 할 때마다 새 객체를 생성하지 않아도 된다. 객체를 cache에 저장해두고 재사용 할 수 있다. 또, 새 객체를 생성하지 않아도 된다는 이 장점은 하나의 인스턴스만 생성하게 하는 싱글톤 패턴에서 유용하게 쓸 수 있다.
3. 정적 팩토리 메서드는 하위 타입의 객체도 반환할 수 있다. 이것을 이용하여 입력 매개변수에 따라서도 다른 클래스 객체를 반환할 수 있다. 따라서 반환할 객체의 타입을 지정할 수 있는 유연성을 가지고 있다.
4. 정적 팩토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
from() : 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메소드
of() : 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메소드
valueOf() : from 과 of 의 더 자세한 버전
instance(), getInstance() : (매개 변수를 받는다면) 매개변수로 명시한 인스턴스를 반환하지만 같은 인스턴스임을 보장하지는 않는다
create(), newInstance() : instance 혹은 getInstance와 같지만 매번 새로운 인스턴스를 생성해 반환함을 보장한다
getType() : getInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩토리 메소드를 정의할 때 쓴다
newType() : newInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩토리 메소드를 정의할 때 쓴다
type() : getType과 newType의 간결한 버전
오 저도 이펙티브 자바 공부하는데 거기서 본 내용이네요! 정리해주셔서 감사합니다 😀