팩토리 패턴 이해하기: 코드 중복 없이 객체 생성 관리하기
팩토리 패턴이 뭘까??
팩토리 패턴은 비슷하게 생긴 몇몇개의 Class 들을 생성할때 자주 사용되는 패턴이다. 실제로 개발을 하다 보면 이런 경우가 꽤 많다. 그런 팩토리 패턴에는 심플 팩토리 패턴 그리고 팩토리 메서드 패턴이 있다! 둘 예를 들어 다음과 같은 상황이라고 해보자. Phone 이라는 인터페이스가 있고 Galaxy 그리고 IPHONE 은 그것을 implements 했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public interface Phone {
void turnOn();
}
public class GalaxyS implements Phone {
@Override
public void turnOn() {
System.out.println("GalaxyS Turned On");
}
}
public class IPhone implements Phone {
@Override
public void turnOn() {
System.out.println("IPhone Turned On");
}
}
그럼 이때 어떤 곳에서 IPhone 혹은 GalaxyS 를 생성하려면 어떻게 해야할까?
1
2
3
4
5
6
Phone phone;
typs = "원하는 타입 이름";
if("GalaxyS".equalsIgnoreCase(type))
phone = new GalaxyS();
else if("IPhone".equalsIgnoreCase(type))
phone = new IPhone();
이런 식으로 만들어 버리면 if 문 을 매번 객체가 생성되는 지점에 모두 추가해주어야해서 상당히 귀찮다! 따라서 이러한 코드를 캡슐화를 해버릴수 있다.!
심플 팩토리 패턴으로 만들어 보기!
아까의 그 if 문들 factory 클래스에 집어 넣는다. 그러면 다른 곳에서 분기를 만들 필요없이 type 만 지정해주면 클래스를 생성 할 수 있다! 그럼 다음에 Shaomi
클래스가 새로 생겨도 factory 에만 살짝 추가해주면 된다!
1
2
3
4
5
6
7
8
9
10
public class PhoneFactory {
private Phone createPhone(String type) {
Phone phone;
if("GalaxyS".equalsIgnoreCase(type))
phone = new GalaxyS();
else if("IPhone".equalsIgnoreCase(type))
phone = new IPhone();
return phone;
}
}
팩토리 메서드 패턴으로 만들어 보기!
하지만 팩토리 패턴도 if 가 계속 추가되고 하는게 조금은 싫을 수 있다! 그럼 팩토리를 여러개 만들 수 있고 이것이 팩토리 메서드 패턴이다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
abstract class PhoneFactory {
public abstract Phone createPhone();
}
class IPhoneFactory extends PhoneFactory {
@Override
public Phone createPhone() {
return new IPhone();
}
}
class GalaxySFactory extends PhoneFactory {
@Override
public Phone createPhone() {
return new GalaxyS();
}
}
이렇게 되면 사용할 때는 다음과 같이 사용하면 된다!
1
2
3
GalaxySFactory galaxySFactory = new GalaxySFactory();
Phone phone = galaxySFactory.createPhone();
phone.turnOn();
어떤 장점이 있을까?
팩토리 패턴은 꽤 자주 사용이 될 수 있고 실제로 클린 코드를 위해서 자주 사용이 될 것이다. 또한 Phone 을 상속받는 객체가 늘어난다고 해서 수정되어야 할 부분이 점점 많이 지면 힘든데 이때 팩토리 패턴을 사용하기 딱 좋다
This post is licensed under CC BY 4.0 by the author.