Design Pattern

예제 코드로 이해해보는 디자인 패턴 - 커맨드 패턴(Command Pattern)

디자인 패턴에 대한 정리글이 꽤 쌓여가고 있는데요. 글을 쓸 때마다 각 디자인 패턴을 잘 설명할 수 있는 예제 코드를 고민해보긴 합니다. 하지만 디자인 패턴이라는 것 자체가 모든 코드에 100% 적용할 수도 없을 뿐더러, 실제로는 꽤나 디테일하고 복잡한 상황을 대하는 고민의 결과이기에 쉬운 예제로 디자인 패턴이 얼마나 유용한지 전달하기가 쉽지만은 않은 것 같습니다. 이번 글에서 소개할 커맨드 패턴(Command Pattern)도 마찬가지입니다. 실무에서도 커맨드 패턴을 사용하는 코드 예제가 있지만 꽤나 복잡한데요. 다른 레퍼런스와 영상 등을 보면서 제 나름대로 이해한 바를 소개하겠습니다. 1. 커맨드 패턴(Command Pattern)이란? 1-1. 커맨드 패턴 디자인 커맨드 패턴(Command patt..

2023.11.29 게시됨

Design Pattern

예제 코드로 이해해보는 디자인 패턴 - 팩토리 메서드 패턴(Factory Method Pattern)

이번 글에서는 또 다른 디자인 패턴 중 하나인 팩토리 메서드 패턴(Factory Method Pattern)에 대해 정리해보겠습니다. 먼저, 간단하게 팩토리 메서드 패턴의 정의와 개념에 대해 소개하고 실제 예제 코드를 보면서 디자인 패턴을 구현하는 방법에 대해 이해해보겠습니다. 1. 팩토리 메서드 패턴? 팩토리 메서드 패턴은 구체 클래스의 생성 로직(Constructor, Builder 등)을 통한 객체의 생성 대신, 구체 클래스들의 공통 인터페이스를 바탕으로 객체를 생성하는 방식을 말합니다. 따라서 팩토리 메서드 패턴을 디자인할 때 전제가 되는 점은 각 구체 클래스들이 공통으로 하는 인터페이스가 존재해야 한다는 것인데요. 아래 예제 코드에서도 살펴보겠지만 팩토리 메서드 패턴의 목표는 구체 클래스를 명시..

2023.11.14 게시됨

Design Pattern

예제 코드로 이해해보는 디자인 패턴 - 데코레이터 패턴(Decorator Pattern)

데코레이터 패턴(Decorator Pattern)은 객체에 동적으로 추가적인 책임을 더해줄 수 있는 디자인 패턴입니다. 데코레이터 패턴을 구현할 때는 서브클래스의 상속(Inheritance)이 아닌 Composition(조합, 구성)을 활용하는데요. 서브 클래스를 활용했을 때도 부모의 역할에 더해 자식의 책임을 추가할 수 있겠지만, 모든 자식이 똑같은 부모의 역할을 상속받아야하고 기능을 확장할 때마다 상속 구조를 다시 설계해야 하는 문제가 발생하게 됩니다. 약간 추상적인 이야기이기 때문에 예제 상황과 코드를 통해 데코레이터 패턴을 이해해보도록 하겠습니다. 1. 코드로 이해하기 데코레이터 패턴을 구현해보기 위해 아래와 같은 상황을 생각해보겠습니다. 피자 가게를 운영하는데 피자에는 다양한 토핑이 존재할 수 ..

2023.11.05 게시됨

Design Pattern

예제 코드로 이해해보는 디자인 패턴 - 옵저버 패턴(Observer Pattern)

0. 옵저버 패턴(Observer Pattern)? 옵저버 패턴(Observer Pattern)은 주체(Subject)와 관찰자(Observer) 사이의 관계를 정의하고 주체의 상태(State)가 변경될 때, 이 변경사항을 관찰자에 전파하는 패턴입니다. [헤드 퍼스트 디자인 패턴(개정판) 14가지 GoF 필살 패턴! 유지 관리가 편리한 객체지향 소프트웨어를 만드는 법] 책에서는 아래와 같은 상황으로 옵저버 패턴을 설명하는데요. 신문사가 사업을 시작하고 신문을 찍어낸다. 독자가 특정 신문사에 구독 신청을 하면 매번 새로운 신문이 나올 때마다 배달을 받을 수 있다. 구독을 해지하기 까지 신문을 계속 받을 수 있다. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 한다. 그러면 더 이상 신문이 오지 않는다..

2023.11.03 게시됨

Design Pattern

예제 코드로 이해해보는 디자인 패턴 - 전략 패턴(Strategy Pattern)

전략 패턴(Strategy Pattern)은 특정 작업에 대해 여러 가지 알고리즘을 적용해야 할 때, 사용자가 런타임에 실제로 사용할 구현체를 결정할 수 있도록 하는 패턴입니다. 전략 패턴은 여러 알고리즘을 각각의 클래스로 캡슐화하고 사용자는 특정 클래스를 런타임에 선택하여 해당 클래스가 가진 알고리즘을 동작하도록 합니다. 이번 글에서는 예제 코드를 작성해보면서 전략 패턴에 대해 이해해보고자 합니다. 1. 예제 코드 물건을 구입할 때 총 결제 금액을 계산해야 하는 상황에서 결제 수단에 따라 다른 방식의 계산법이 적용될 수 있습니다. 예를 들어, 카드로 계산할 때는 물건들의 총 금액을 합한 금액을 모두 지불해야 하지만 현금으로 결제하면 5% 할인 혜택을 받을 수 있다고 해보겠습니다. 이를 위해 아래와 같이..

2023.10.29 게시됨