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

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


먼저 추상 팩토리 패턴이란

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

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

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




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

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

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

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


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

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







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




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

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


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

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

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







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

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

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


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

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

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


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

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





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

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

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

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

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

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




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

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

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





알고리즘의 기초가 되는 문자열 문제를 풀어보겠다.

백준 사이트에 있는 아스키 코드 , 알파벳 찾기, 문자열 반복이다.


01. 아스키코드




말할 것도 없는 문제




02. 알파벳 찾기




문자열을 찾아 체크하는 문제

문자열 체크라 해서 체크 변수를 생각없이

char로 줬는데 상당히 애를 먹었다.

출력하라는 대상의 자료형이 무엇인지 똑바로 보고

제대로 변수를 선언 하도록 하자!




03. 문자열 반복




도대체 뭐가 틀렸는지 알 수가 없다.

20 글자 넘지 마라해서 21 , 20 ,19로 다 체크해도 안되고

실행 시켜서 이것 저것 다 넣어봐도 잘 실행되는데..

기분 팍 상해서 오늘은 퇴근


알고리즘 기초가 되는 문자열

코딩 테스트 단골 메뉴이기 때문에

자주 풀어봐야겠다.


BFS 알고리즘 저글링 방사능 오염 문제 (정올)


BFS에서 좀 난해한 부분이라 하면

큐의 사이즈를 얼마로 해줄 것인가.

경우의 수를 다 따져서 큐의 사이즈를

정해줘야 하니 이것 또한 생각해봐야 할 문제.




그리고 이 문제를 풀면서 느낀점은

좌표에 대한 개념에 좀 더 익숙해져야 할 것 같은..





01. 저글링 구조체 선언

그리고 BFS 알고리즘을 위한 큐 관련 함수




02. 유효성 검사와 큐가 비었는지 검사




03. 큐를 하나씩 빼면서 탐색

또한 탐색해야할 부분에 대해서

큐에 차곡차곡 쌓아두자.




04. 메인 함수


BFS 알고리즘은 DFS 알고리즘에 비해

손이 많이 간다는 느낌이 든다.

하지만 뭔가 문제가 깔끔하기에 맘에 든다.




+ Recent posts