Java 언어로 배우는 디자인 패턴 입문 - 쉽게 배우는 GoF의 23가지 디자인 패턴, 3판
유키 히로시 지음, 김성훈 옮김 / 영진.com(영진닷컴) / 2022년 12월
평점 :
장바구니담기


** 디자인패턴

디자인패턴은 소프트웨어 설계시 반복적으로 발생하는 문제에 대한 해법입니다.


** 디자인 패턴을 사용하는 이유

디자인 패턴은 사용하는 이유는 프로그램의 재사용 입니다.

클래스 라이브러리는 부품이 된 프로그램이고, 디자인패턴은 부품이 어떻게 조립되어 있는지, 개별 부품이 어떻게 관련되어 큰 기능을 하는지 표현하는 것입니다.

결국 디자인패턴은 무기라고 생각하면 됩니다.

칼을 가지고 싸울지, 총을 가지고 싸울지, 아니면 맨손으로 싸울지 등 다양한 무기들을 통해 우리들은 프로그래밍을 할때 판단할 수 있을 것입니다.


GOF의 23가지 디자인 패턴을 java 언어로 예제와 함께 볼수 있어서 활용도가 높은 책입니다.


***( Part 1 ) Iterator 패턴 – 처리를 반복하다.

- 무엇인가 많이 모여 있을 때 이를 순서대로 가리키며 전체를 검색하고 처리를 반복하는 것



***( Part 2 )  Adapter 패턴 – 사이에 끼워 재사용한다

- 일반 상품을 깨끗한 포장지로 싸서 선물용으로 상품으로 만드는 것처럼, 무엇인가를 포장해서 다른 용도로 사용할 수 있도록 변환해 주는 역할을 합니다.

1) 클래스에 의한 Adapter 패턴( 상속을 사용한 패턴)

2) 인스턴스에 의한 Adapter 패턴( 위임을 사용한 패턴)


***(Part 3 )  Template Method 패턴 – 하위 클래스에서 구체적으로 처리한다

- 상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적 내용을 결정하는 디자인 패턴입니다.


***(Part 4 )  Factory Method 패턴 – 하위 클래스에서 인스턴스를 만든다

- 인스턴스 생성방법을 상위 클래스에서 결정하되, 구체적인 클래스 이름까지는 결정하지 않습니다. 구체적인 살은 모두 하위 클래스에서 붙입니다.



***(Part 5 )  Singleton 패턴 – 인스턴스를 단 하나만 만든다

- 인스턴스는 보통 여러번 호출하면 여러개 생기는데 싱글톤 패턴을 통해 인스턴스 하나만 존재하는 것을 보증하는 패턴입니다.


***(Part 6 )  Prototype 패턴 – 복사해서 인스턴스를 만든다

- 클래스에서 인스턴스를 생성하는 대신 인스턴스로부터 다른 인스턴스를 생성하는 패턴입니다.


***(Part 7 )  Builder 패턴 – 복잡한 인스턴스를 조립한다

- 복잡한 인스턴스를 단계적으로 조립하는 패턴입니다.


***(Part 8 )  Abstract Factory 패턴 – 관련 부품을 조합하여 제품을 만든다

- 공장의 부품처럼 조립하여 인스턴스를 생성하는 패턴입니다.

- 부품의 구체적인 구현에는 주목하지 않고 인터페이스(API)에 주목합니다. 인터페이스(API)만 사용해서 부품을 조립하고 제품을 완성하는 것입니다.


***(Part 9 )  Bridge 패턴 – 기능 계층과 구현 계층을 나눈다

- 현실 세계의 다리가 강 양쪽을 연결하는 역할 하는 것처럼, Bridge 패턴도 두 장소를 연결하는 역할을 합니다.


***(Part 10 )  Strategy 패턴 – 알고리즘을 모두 바꾼다

- 적을 해치우는 작전, 군대를 움직이는 방안, 그리고 문제를 풀어나가는 방법 등을 의미하는 패턴입니다.

- 스위치를 전환하듯 알고리즘을 바꿔서, 같은 문제를 다른 방법으로 해결하기 쉽게 만들어 주는 패턴입니다.


***(Part 11 )  Composite 패턴 – 그릇과 내용물을 동일시한다

- 그릇과 내용물을 동일시하여 재귀적인 구조를 만드는 패턴입니다.


***(Part 12 )  Decorator 패턴 – 장식틀과 내용물을 동일시한다

- 객체에 점점 장식을 더해 가는 패턴입니다.


***(Part 13 )  Visitor 패턴 – 데이터 구조를 돌아다니면서 처리한다

- 데이터 구조를 돌아다니면서 같은 고작을 반복해서 작용하는 패턴입니다.


***(Part 14 )  Chain of Responsibility 패턴 – 책임을 떠넘긴다

- 여러 객체를 사슬처럼 연쇄적으로 묶고, 객체 사슬을 차례대로 돌면서 원하는 객체를 결정하는 방법 패턴입니다.


***(Part 15 )  Facade 패턴 – 단순한 창구를 만든다

- 복합하게 얽힌 클래스를 개별적으로 제어하는 것이 아니라, 창구 역할을 하는 클래스를 하나 배치함으로써 시스템 전체의 조작성을 좋게 하는 패턴입니다. 

- 복잡하게 얽혀서 너저분한 세부 내용을 정리하여 높은 수준의 인터페이스(API)를 제공합니다.

- 클래스와 메소드가 많이 보이면 개발자들은 틀리기 쉬워서 싫어합니다. 그래서 인터페이스(API) 수를 줄이는게 목표입니다.


***(Part 16 )  Mediator 패턴 – 중재자를 통해서 처리하다

- 복수의 클래스가 서로 직접 소통하지 않고, 중개 역할을 하는 클래스를 하나 준비해 그 클래스하고만 의사소통을 하게 해서 프로그램을 단순하게 만드는 패턴입니다.


***(Part 17 )  Observer 패턴 – 상태 변화를 알려 준다

- 상태가 변화하는 클래스가 그 변화를 통지받는 클래스를 분리해 생각하는 패턴입니다.


***(Part 18 )  Memento 패턴 – 상태를 저장한다

- 인스턴스의 상태를 나타내는 역할을 도입해, 캡슐화의 파괴에 빠지지 않고 저장과 복원을 하는 패턴입니다.

- Memento 유효기간 : 메모리에서만 사용할 경우에는 큰 문제는 없지만, 파일로 영속적으로 저장할 경우 유효기간이 문제가 되기 때문에 주의해야 합니다.


***(Part 19 )  State 패턴 – 상태를 클래스로 표현한다

- 상태를 클래스로 표현하고 상태에 따른 분기 처리를 줄여 주는 패턴입니다.


***(Part 20 )  Flyweight 패턴 – 같은 것은 공유해서 낭비를 없앤다

- 여러 곳에서 같은 것이 등장할 때 그것들을 공유해서 낭비를 없애는 패턴입니다.

- 인스턴스를 최대한 공유하고 쓸데없이 new하지 않는다는 점 입니다.


***(Part 21 )  Proxy 패턴 – 필요해지면 만든다

- 정말로 목적한 것이 필요해 질때까지는 대리인을 시켜 처리를 진행하는 패턴입니다.


***(Part 22 )  Command 패턴 – 명령을 클래스로 표현한다

- 요구나 명령을 형태로 만들어 클래스로 표현하는 패턴입니다.

- 이력을 관리하고 싶을 때는 해당 인스턴스의 집합을 관리하면 됩니다. 명령의 집합을 저장해 두면 같은 명령을 재실행 할 수도 있고, 여러 명령을 모아서 새로운 명령으로 재이용할 수도 있습니다.


***(Part 23 )  Interpreter 패턴 – 문법 규칙을 클래스로 표현한다

- 문법 규칙을 클래스로 표현하는 패턴입니다.

- 기본적인 명령을 순서대로 실행하거나 반복하는 언어 그리고 일괄처리 언어도   Interpreter 패턴으로 처리할 수있습니다.



적절한 디자인패턴 선택하기 위해서는 자신이 설계하는 소프트웨어가 어떠한 문제를 갖고 있는 먼저 생각해야 합니다.

그 다음에 디자인 패턴을 통해 해결할 수 있는게 있으면 적용하는게 좋습니다.

 


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
l 공유하기 l 북마크하기찜하기 lthankstoThanksTo