정적 팩토리 메서드

한솔·2025년 10월 5일

핵심: 객체를 만들 때부터 그 용도나 상태를 지정해주는 것

원래였던 것
User user = new User("한솔",20);

정적 팩터리 메서드
User guest = User.guest(); // 비회원 상태로 초기화된 객체
User admin = User.admin(); // 관리자 권한을 가진 객체

정적 팩토리 메서드 원칙
1. static 키워드 사용
2. 내부에서 new로 객체 생성 후 반환
3. 메서드명이 의미를 설명함
4. 타입 매개변수 <T> 지원 (제네릭)

public static <T> 반환타입 메서드명(매개변수들) {
    return new 생성자호출(매개변수);
}
public static <T> ApiResponse<T> of(T data) {
    return new ApiResponse<>(data);
}

public static <- 정적이라 객체 없이 호출이 가능하다(ApiResponse.OK() 형태)
return new AipResponse<>() <- factory 역할(객체를 만들어서 반환)
즉 생성자를 감싸서 좀 더 명확한 이름과 제어를 부여한 형태

요약하자면
정적 팩토리 메서드는 객체 생성을 대신 수행하는 정적(static)메서드다.
생성자보다 의미 있는 이름을 줄 수 있고 캐싱이나 싱글톤 처리 등 객체 생성을 통제하기에 좋다.
지금 코드의 OK()와 fail()이 그 예시다.


예시 코드

public class User{
	private String name;
    private String role;
    
    private User(String name, String role){
    	this.name=name;
        this.role=role;
    }
    
    // 정적 팩터리 메서드
    public static User guest(){ 
    	return new User("GUEST","GUEST");
    }
    public static User admin(){
    	return new User("ADMIN","ADMIN");
    }
    public static User of(String name){ // static은 객체 없이도 호출이 가능하다는 점.
    	return new User(name,"USER"); //User.of("한솔")이렇게 클래스 이름으로 바로 호출이 가능하다. 생성자처럼 new 안 써도 됨
        
        // of: ~로부터 객체를 만들어낸다.
        // 즉 User객체를 만들어서 돌려주겠다는 뜻
        // 표준 라이브러리에서도 많이 씀
        // List.of(), Optional.of() 등
    }
}

사용 시

User u1 = User.guest(); // 이미 게스트 상태로 만들어짐
User u2 = User.admin(); // 이미 관리자 상태로 만들어짐

0개의 댓글