C++ 디자인 패턴 중에 하나인 Abstract Factory

추상 팩토리 패턴에 대해 알아보도록 하겠다.


먼저 추상 팩토리 패턴이란

생성 방법을 알고 있는 객체를 매개변수로

넘겨받음으로써 생성할 객체의 유형을 달리하는 것이다.

(무슨 말인지 모르겠다. 포스팅의 마지막엔 이해가 될 것이다.)




팩토리 패턴의 특징에 대해서는 길게 설명하지 않는다.

추상 팩토리 패턴이 도대체 무엇인지, 어떻게 구현되는지만

코드로서 이해해보는 시간을 가지겠다.

(제대로된 코드는 아니지만 충분히 이해가 될 것이다)


먼저 맵을 만드는 클래스가 있다.

이 클래스는 필드와 장애물을 추가할 수 있다.







또한 이들을 묶어서 맵을 구성하는 MapMgr 클래스가 있다.




위의 코드에는 문제점이 있는데 살펴보면

그렇다. 위의 코드는 유연성과 거리가 먼 하드코딩 되어 있다는 점.


CreateMap()에서 객체를 이름으로 생성했기 때문에

저 함수는 이제 함수 내에서 생성된 객체에 의해

구성된 맵만 반환할 것이다. (재사용성 제로)







자 이제는 CreateMap() 함수 내에서 이름으로

생성하지 않고 팩토리 객체로 생성하고 있다.

따라서 어떤 객체가 들어오느냐에 따라 생성방식이 달라진다는 점.


자 그렇다면 맵의 구성요소들과 팩토리 객체를

추상 클래스로 만들고 파생시켜보자.

(수정) CreateMap()은 맵을 리턴한다.


이제는 추상 팩토리 클래스의 파생클래스 객체를 매개변수로 전달하면

그에 맞는 맵이 생성되게 된다. 위의 관계를 그림으로 나타내면





마지막으로 추상 팩토리 패턴의 단점 하나를 짚고 가겠다.

만약 맵을 만들기 위한 용도가 아닌 곳에서 사용하려 한다면

( 만약 맵이 아니라 몬스터를 찍어내려 한다면)

팩토리의 구현을 변경해야 한다. 이는 추상 팩토리와 모든

서브클래스의 변경을 가져온다. 즉 팩토리는 자신이

생성 할 수 있는 집합에만 고정되어 있다.




지금까지 C++ 디자인 패턴 인 Abstract Factory

추상 팩토리 패턴에 대해 이해하는 시간을 가져보았다.

다음에는 팩토리 메서드 패턴으로 돌아오겠다.





+ Recent posts