Template Method Pattern

알고리즘의 구조를 슈퍼클래스에서 정의하고, 세부적인 구현은 서브클래스에서 담당하도록 하는 디자인 패턴이다. 이 패턴은 코드의 중복성을 줄이고 알고리즘의 변하지 않는 부분과 변해야 하는 부분을 분리하는 데 유용하다. Motivation 온라인 교육 플랫폼에서 강의 과정의 진행 단계를 표준화하려고 한다. 모든 과정은 다음 단계를 따른다고 하자. 강의 자료 준비 강의 진행 과제 제출 성적 평가 하지만, 강의 유형에 따라 세부적인 구현이 다르다. 템플릿 메서드를 정의하여 강의 과정의 공통된 흐름을 유지하여, 알고리즘의 흐름을 변경하지 않고 세부 구현만 변경할 수 있으며, 중복 코드를 제거할 수 있다....

February 8, 2025 · 3 min · Beomsu Lee

Visitor Pattern

객체의 구조와 관계는 변경하지 않고, 객체에 대한 연산을 외부에서 추가하는 디자인 패턴이다. 이 패턴은 객체를 방문하여 각 객체에 대해 서로 다른 작업을 수행할 수 있게 해준다. Motivation 여러 종류의 도형 객체들을 가진 시스템을 관리한다고 하자. 각 도형 객체(Circle, Rectangle, Triangle)는 자체적인 속성과 고유한 그리기 로직을 가진다. 시스템에서 도형들에 대해 공통적으로 할 수 있는 연산들(예: 면적 계산, 그리기)을 추가해야 한다고 하자. 방문자 패턴을 사용하면 도형 객체의 확장(수정) 없이 연산을 추가할 수 있다....

February 8, 2025 · 6 min · Beomsu Lee

State Pattern

객체 내부 상태에 따라 객체의 행동을 변경할 수 있도록 하는 패턴이다. 이 패턴을 사용해 조건문 대신, 각 상태로 별도의 클래스로 분리하여 객체의 상태 변화에 따라 동적으로 행동을 변경할 수 있다. Motivation 게임 캐릭터가 여러 상태를 가질 수 있다고 하자. 예륻 들어, 캐릭터는 대기 상태, 공격 상태, 방어 상태 등 여러 상태가 있을 수 있다. 캐릭터의 행동은 현재 상태에 따라 달라지며, 상태가 바뀔 때마다 행동도 달라진다. 이 경우 상태 패턴을 도입하여 게임 캐릭터의 상태 변화에 따라 동적으로 행동을 변경할 수 있다....

February 2, 2025 · 5 min · Beomsu Lee

Strategy Pattern

전략 패턴은 문제 해결 방법(알고리즘)을 캡슐화하여 클라이언트 코드와 분리함으로써, 알고리즘의 교체를 동적으로 수행할 수 있게 해준다. Motivation 정렬 알고리즘을 사용하는 프로그램이 있다고 하자. 이 프로그램은 여러 가지 정렬 알고리즘(예: 버블 정렬, 퀵 정렬)을 지원해야 한다. 사용자는 상황에 따라 정렬 알고리즘을 선택할 수 있어야 한다고 하자. 이때 전략 패턴을 사용하면 클라이언트 코드는 정렬 방식에 의존하지 않으며 전략(정렬 알고리즘)을 동적으로 교체할 수 있다. Applicability 행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때 알고리즘의 변형이 필요할 때 사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때 하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스 연산 안에서 복잡한 다중 조건문의 모습을 취할 때 Structure Strategy: 제공하는 모든 알고리즘에 대한 공통의 연산들을 인터페이스로 정의한다....

February 2, 2025 · 5 min · Beomsu Lee

Interpreter Pattern

인터프리터 패턴은 주어진 언어의 문법을 정의하고 해석하는 데 사용되는 패턴이다. 컴파일러, SQL 쿼리, 정규 표현식 등에 활용된다. Motivation 수학 표현을 해석하고 계산하는 프로그램을 만들어야 한다고 하자. 예를 들어, 문자열 “5 + 3 - 2"를 입력하면 6을 반환하는 기능을 구현해야 한다. 인터프리터 패턴을 사용하면 +, -와 같은 연산을 쉽게 추가할 수 있고, 문법을 변경하거나 확장하는 것이 용이하다. Applicability 정의할 언어의 문법이 간단할 때 효율성보다는 유지보수성과 확장성이 필요할 때 Structure AbstractExpression: 모든 표현식(Expression) 클래스들이 공통으로 가져야 할 인터페이스 역할을 한다....

February 1, 2025 · 5 min · Beomsu Lee