Interpreter Pattern

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

February 1, 2025 · 5 min · Beomsu Lee

Iterator Pattern

내부 구조를 노출하지 않으면서 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공한다. Motivation 여러 종류의 자료구조(예: 배열, 리스트)에 대해 그 내부 요소들을 하나씩 순차적으로 처리해야 하는 상황에서, 이 요소들을 순차적으로 접근할 수 있는 공통의 방법을 제공하고 싶다고 하자. 이터레이터 패턴을 사용하면 집합체의 내부 구조를 몰라도, 집합체의 모든 요소에 접근할 수 있게 해준다. Applicability 객체 내부 표현 방식을 모르고도 집합 객체의 각 원소들에 접근하고 싶을 때 집합 객체를 순회하는 다양한 방법을 지원하고 싶을 때 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회하고 싶을 때 Structure Iterator: 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공한다....

February 1, 2025 · 8 min · Beomsu Lee

Mediator Pattern

객체 간 직접적인 상호작용을 제한하고, 대신 중재자를 통해 통신하도록 하는 패턴이다. 중재자 객체를 통해 간접적으로 상호작용하여 객체 간 결합도를 낮추는 것이 목표이다. Motivation GUI 애플리케이션에 여러 개의 UI 컴포넌트(예: 버튼, 체크박스, 텍스트 필드 등)가 서로 상호작용할 때, 한 컴포넌트의 상태가 변경되면 다른 컴포넌트도 변경되어야 하는 상황이 많다. 예를 들어, 체크박스를 선택하면 버튼이 활성화됨 텍스트 필드에 입력하면 버튼의 상태가 변경됨 버튼을 클릭하면 다른 UI 요소들이 변경됨 이러한 상호작용을 각각의 UI 요소가 직접 관리하면, 객체 간 결합도가 높아져 유지보수가 어려워진다....

February 1, 2025 · 4 min · Beomsu Lee

Memento Pattern

메멘토 패턴은 객체의 상태를 저장하고, 그 상태를 복원할 수 있도록 하는 패턴이다. 객체의 이전 상태를 추적하고 복원할 때 유용하다. Motivation 어떤 애플리케이션에서 실행 취소(undo) 기능을 구현하려 한다. 사용자가 특정 상태에서 변경을 가했을 때, 이전 상태로 되돌릴 수 있어야 한다. 예를 들어, 사용자가 텍스트 편집기에서 문서를 수정한 후, 실행 취소 버튼을 누르면 이전 상태로 되돌려야 한다. 하지만 직접 객체의 내부 상태를 저장하면 캡슐화를 위반하게 된다. 이때 메멘토 패턴을 활용하면 상태 정보를 캡슐화하여 저장해 이전 상태로 쉽게 복원할 수 있다....

February 1, 2025 · 4 min · Beomsu Lee

Observer Pattern

객체의 상태 변화가 잇을 때, 그 객체에 의존하는 다른 객체들에게 자동으로 알림을 보내고, 상태를 업데이트하는 패턴이다. 이 패턴은 관찰자(observer) 객체들이 주체(subject) 객체의 상태 변화를 관찰하고, 주체 객체의 상태가 변할 때마다 그에 맞는 행동을 취한다. Motivation 여러 명의 구독자가 뉴스레터를 구독한다고 하자. 뉴스레터는 주제(subject) 역할을 하고, 구독자는 관찰자(observer) 역할을 한다. 뉴스레터의 내용이 변경될 때마다 구독자에게 알림을 보내야 한다. 이때 옵저버 패턴을 사용하면 새롭게 변경된 내용을 구독자에게 전달할 수 있다. Applicability 주체 객체와 관찰자 객체를 서로 독립적으로 만들고 이들 간 관계를 느슨하게 유지(캡슐화)해야 할 때 주체 객체에 가해진 변경으로 관찰자 객체를 변경해야 되지만, 그 관찰자들이 얼마나 많은지 몰라도 될 때 주체 객체가 관찰자 객체에 자신의 변화를 통보해야 하는데, 그 변화에 관심있어 하는 관찰자 객체들이 누구인지에 대한 가정 없이도 통보가 되어야 할 때 Structure Subject: 관찰자 객체들을 관리한다....

February 1, 2025 · 6 min · Beomsu Lee