Post

팩토리 패턴 이해하기: 코드 중복 없이 객체 생성 관리하기

팩토리 패턴이 뭘까??


팩토리 패턴은 비슷하게 생긴 몇몇개의 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.

© 병욱. Some rights reserved.