0. GoF Desgin Pattern 이란?


디자인 패턴이란, 객체지향 프로그래밍(Object-oriented Programming, OOP) 소프트웨어 작성에 있어서 문제해결을 위한 공통적인 방법론을 말한다.

GoF란 이 책을 쓴사람들이 4명인데 이를 일컬어 Gang of Four, GoF라고 한다. 그래서 GoF의 디자인 패턴이라고 시중에 많이 나와있다.


당신이 컴공이라면(비슷한 학과 포함) 3학년 때 쯤 많이 배웠을 것이다.

아니라면 지금부터 배우면 된다. 어렵지 않다.


디자인 패턴은 우리의 문제해결 능력을 높여 주며,

더 좋은 공장 디자인을 완성 시켜 줄 것이다.


1. 공통적인 방법론


대체 여기서 말하는 공통적인 방법론이란 무엇인가? 프로그래밍은 마치 문제를 푸는 것과 같다.

현실 세계의 문제를 프로그래머들은 컴퓨터에서 코딩을 하여 푼다.


이걸 좀 간단하게 설명해주겠다.


우리가 '의자' 공장을 만든다고 해보자. 의자는 어떻게 구성되어 있는가?

'의자'를 정의 해보자.


1. 다리가 4개다.

2. 등받이가 있다.

3. 앉는 자리가 있다. (엉덩이 대는 곳, 이걸 뭐라하나)


이렇게 생각하고 '의자'를 만드는 공장을 지었다. 그랬더니 고객이 말한다.


a. 나는 '소파'가 필요해요.


오! 이런, 소파는 의자인가? 그렇다 1,2,3을 모두 충족한다.

그래서 만들어 주었다. 그랬더니 다른 고객이 말한다.


b. 나는 '나무 의자'가 필요해요.

c. 저는 허먼밀러 같은 '고급 의자'가 필요해요.


이렇게 현실세계는 더욱 복잡하다.

여기서 재밌는 것이 뭐냐면 우리가 '의자'라고 정의한 1,2,3이 a와 b와 c에 모두 공통적으로 쓰인다는 것이다.


자 다시 말해서 우리는 '소파', '나무 의자', '틸팅도 되고 허리에 좋은 고오급 허먼밀러 의자'를 만들어 주기 위해서

'의자'라는 공통부분을 이용해서 모두 해결 하였다!


의자라는 정의를 이용하여 우리는 소파를 만들었다.

똑같이 의자라는 정의를 이용하여 우리는 나무 의자를 만들었다.

허먼밀러의자도 역시 의자기 때문에 기존의 의자 정의에 몇가지를 추가하여 만들었다.


어디서 많이 보던 패턴 아닌가?


2. 팩토리오에서의 패턴


자 이제 전자 회로(이하 녹칩) 만든다고 가정해보자.


전자 회로는 구리판을 이용하여 구리 전선을 제작하고

철광석을 이용하여 철판을 제작하여 같이 쓰까주면 된다.


다시 이 녹칩은 전기채광 드릴에도 쓰이고

투입기를 만들 때도 쓰이고 정류장도 만들고 물류 로봇도 만든다.


'녹칩'이라는 공통된 재료를 이용하여 해결 하였다.


이렇게 '공통된 재료'를 효율적으로 사용하는 방법을 디자인 패턴을 이용하여 해결 할 수 있다.


3. 디자인 패턴


GoF의 디자인 패턴은 크게 3가지로 분류되고 총 22가지로 정의 된다.

소프트웨어를 설계하면서 생기는 모든 문제를 겨우 22개로 푼다고?


그렇다. 대부분의 문제를 해결 할 수 있다.


디자인 패턴의 세가지 분류

A. Creational pattern - 5개

B. Structural pattern - 7개

C. Behavior pattern - 10개


가장 먼저 Creational pattern를 다음화 부터 배워 볼 것이다.


--------------------------


실제 팩토리오에서는 공장의 디자인은 디자인 패턴을 사용 하는 것말고 공장의 효율성에 초점이 맞춰져 있음

재미로 보길 바라며, 사고능력의 확장을 팩토리오를 통해서 할 수 있다면 아주 좋을 것 같다.