앞에 static이 붙어 인스턴스 생성을 해주는 메서드다. 간단한 건 기본 생성자를 만들어 사용하면 되지만, 이미 생성된 객체가 있다면 그 객체를 반환한다거나 메서드 이름을 명시해야 하는 등 생성하는 과정에서 따로 처리해야할 게 있으면 사용한다.
// Member.java
public class Member {
private final String name;
// 1. 생성자를 private으로 선언하여 외부에서 new 키워드로 직접 생성을 막습니다.
private Member(String name) {
this.name = name;
}
// 2. 객체 생성을 위한 정적 팩토리 메서드를 public으로 제공합니다.
// 메서드 이름을 통해 어떤 역할을 하는지 명확히 알 수 있습니다.
public static Member of(String name) {
// 추가적인 유효성 검사 로직 등을 여기에 넣을 수 있습니다.
return new Member(name);
}
public String getName() {
return name;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
// 컴파일 에러: Member의 생성자가 private이므로 직접 호출할 수 없습니다.
// Member member1 = new Member("홍길동");
// 올바른 방법: 정적 팩토리 메서드를 통해 객체를 생성합니다.
Member member2 = Member.of("김철수");
System.out.println("생성된 멤버의 이름: " + member2.getName());
// 출력: 생성된 멤버의 이름: 김철수
}
}
이렇게 사용할 수 있다. 생성자를 통해 유연한 구현이 가능해진 것이다.