*디자인 패턴 소개와 전략 패턴*
1. 디자인 패턴이란?
디자인 패턴이란 소프트웨어 개발(설계)에서 발생하는 문제들을 해결하는 방법들이 정형화된 패턴으로 정리할 수 있다는 가정하에 만들어진 개념이다. 어떤 문제를 해결하려고 할 때, 누군가는 이미 내가 직면한 문제를 효과적인 방식으로 해결했을 것이다. 이런 해결방식들을 모아 디자인 패턴으로 정의하였다. 현재는 수천 개의 디자인 패턴이 있다고 한다. 하지만 가장 유명한 것은 GoF Design Pattern 이다. 23개의 디자인 패턴을 정리하여 수록하였다고 한다. 이 책은 자주 쓰이는 14개의 디자인 패턴을 다룬다.
2. 오리시뮬레이터 게임과 상속.. 그리고 구상
헤드퍼스트 디자인 패턴을 읽기 전 오브젝트를 읽을 떄의 구성과 비슷하게 진행되었다. 책에서는 오리시뮬레이터라는 프로그램을 예시로 들었다. 이 프로그램은 상속을 기반으로 만들어진 프로그램이다.
오리(부모 클래스) <- 여러 세부적인 오리들

이런 구조의 오리시뮬레이터라는 프로그램을 변경할 때 문제가 생긴다.
대표적으로
1. 부모클래스의 변경시 자식 클래스에 의도치 않은 변경이 일어남 (날기를 새끼 낳기로 변경)
2. 자식클래스가 부모클래스의 메서드가 필요하지 않은 경우 (고무오리를 추가했는데 고무오리는 날기, 울기가 필요없음)
... 등의 문제들이 발생한다.
책은 이런 상속의 문제점에 대해 해결하는 과정(생각하는 과정?)을 차근차근 보여준다.
1. 문제가 무엇인지 파악한다. ( 오리(부모)클래스의 변경시 자식클래스도 영향을 받는 점)
2. 변하는 부분과 변하지 않는 부분을 찾아내서 분리한다. ex) 날기, 울기 등의 메서드가 변할 가능성이 높다고 가정
달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 '캡슐화'한다.
- 첫번쨰 디자인 원칙
애플리케이션에서 달라지는 부분을 찾아내고, 달리지지 않는 부분과 분리
- 두번쨰 디자인 원칙
구현보다는 인터페이스에 맞춰서 프로그래밍한다.
3. 인터페이스로 만든 메서드들을 오리의 행동과 통합한다.

오리의 자식들은 인터페이스를 통해 구현된 8자 비행, 그냥 날기 등을 가져다가 쓸 수 있다. 추가적인 날기 구현이 필요하면 인터페이스에 추가로 구현하면 된다. 이런 식으로 중간 다리?(인터페이스)를 넣어 런타임시에도 변경이 용이하고 느슨한 결합을 가진 프로그램을 만드는 패턴을 전략패턴이라고 한다.
이런 개발은 우리가 흔히 아무 생각 없이 많이 해왔던 일들인데 패턴으로 명명하니 뭔가 특별해진 느낌이다.
3. 인상적이었던 디자인 패턴사용하면 좋은 점
소통시간의 감소 - 디자인 패턴을 서로 알고 있다는 가정하에 소통시간이 줄어들어 중요한 것에 집중할 수 있다.
(전략 패턴을 사용해서 ~~api를 구현했습니다. vs ~~api를 구현할 때, 오리의 행동들을 인터페이스로 만들고 구현은 따로 만들었습니다.)
4. 결국은...
객체지향 원칙을 밑바탕에 두고 디자인 패턴을 적용하면 효과적인 소통과 개발을 동시에 잡을 수 있다는 개인적인 결론을 내렸다. 책 자체는 가볍게 읽으면서 여러 디자인 패턴에 대해 생각해 볼 수 있어 좋았다. 아직 1챕터라 그런가?
'책 > 헤드퍼스트 디자인패턴' 카테고리의 다른 글
| Chapter 08 Template method 템플릿 메서드 패턴 (0) | 2025.08.31 |
|---|---|
| Chapter 07 어댑터(Adapter)패턴과 파사드(Facade)패턴 (0) | 2025.08.24 |