팩토리 메서드(Factory Method) 패턴 이란?
팩토리 메서드 패턴은 객체 생성을 클라이언트가 new를 통해서 하는 것이 아닌 객체 생성을 전담하는 공장(Factory)을 통해 하는 것이다.
공장은 추상 클래스로 선언하고 공장에서 생성할 제품은 인터페이스로 선언해서 상속을 사용해서
(ex) UserFactory -> GoogleUserFactory, User -> GoogleUser)
OCP를 위반하지 않고 기존 코드의 수정 없이 기능을 확장할 수 있다.
회원가입 기능을 위한 User와 User를 생성할 Factory인 UserFactory를 선언한다.
interface User {
void signup();
}
abstract class UserFactory {
public User newInstance() {
User user = createUser();
user.signup();
return user;
}
protected abstract User createUser();
}
네이버, 카카오 소셜 로그인 기능을 추가한다고 했을 때 User를 상속받는 클래스를 생성한다.
class NaverUser implements User{
@Override
public void signup() {
System.out.println("네이버");
}
}
class KakaoUser implements User {
@Override
public void signup() {
System.out.println("카카오");
}
}
Factory 또한 NaverUser와 KaKaoUser에 대응할 수 있도록 UserFactory를 상속받아 기능을 구현한다.
class NaverUserFactory extends UserFactory {
@Override
protected User createUser() {
return new NaverUser();
}
}
class KakaoUserFactory extends UserFactory {
@Override
protected User createUser() {
return new KakaoUser();
}
}
로그인 기능이 네이버 로그인만 존재했다고 한다면 팩토리 메서드 패턴을 사용해서 구현한다면
카카오 로그인 기능을 추가했을 때 기존 코드의 수정 없이 로그인 기능을 추가할 수 있다.
// 네이버 로그인
UserFactory userFactory = new NaverUserFactory();
User user = userFactory.newInstance();
// 카카오 로그인
UserFactory userFactory1 = new KakaoUserFactory();
User user1 = userFactory1.newInstance();
팩토리 메서드 패턴을 사용하면 OCP를 위반하지 않을 수 있다는 것이 장점이다.
'자바' 카테고리의 다른 글
[디자인 패턴] 프록시(Proxy) 패턴 (0) | 2024.03.20 |
---|---|
[디자인 패턴] 템플릿 메서드(Template Method) 패턴 (0) | 2024.03.18 |
[디자인 패턴] 싱글톤(Singleton) 패턴 (0) | 2024.03.15 |
컬렉션 프레임워크(Collection Framework) (0) | 2022.12.09 |
Auto Boxing/UnBoxing (0) | 2022.12.09 |