목록스터디/디자인 패턴 (8)
영권's
Factory Method Pattern Factory Method Pattern는 부모(상위) 클래스에 알려지지 않은 구현 클래스를 생성하는 패턴으로 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴입니다. Product은 인터페이스를 선언하며, 이 인터페이스는 작성자와 하위 클래스가 생성할 수 있는 모든 개체에 공통적입니다. Concrete Product는 제품 인터페이스의 구현입니다. Creator 클래스는 새 Product 개체를 반환하는 Factory Method를 선언합니다. 이 메서드의 반환 유형은 Product 인터페이스이어야 합니다. 이름과 다르게 Creator의 주된 책임은 Product 생성이 아닙니다. 일반적으로 Creator클래스는 이미 제품과 관련된 몇가지 핵심 ..
Visitor Patterns 객체 지향 프로그래밍과 소프트웨어 공학에서 비지터 패턴(visitor pattern; 방문자 패턴)은 알고리즘(비즈니스 로직)을 객체 구조에서 분리시키는 디자인 패턴이다. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나이다. (출처 : 위키백과) 문제점 예시 상황 하나의 거대한 그래프로 구성된 지리 정보와 함께 작동하는 앱을 개발한다고 했을 때, 그래프의 각 노드는 도시와 같은 복잡한 실체를 나타낼 수 있지만, 산업, 관광 지역 등과 같은 보다 세분화된 것들을 나타낼 수도 있다. 노드가 나타내는 실제 개체 사이에 도로가 있으면 노드가 다른 개체와 연결됩니다. 이후에 그래프를..
Template Method 템플릿 메서드는 슈퍼클래스에서 알고리즘의 골격을 정의하지만 구조를 변경하지 않고 서브클래스가 알고리즘의 특정 단계를 재정의할 수 있도록 하는 행동 디자인 패턴입니다. 문제점 예시 예를 들어, 사용자는 다양한 형식(PDF, DOC, CSV)의 앱 문서를 제공하고 이러한 문서에서 일관된 형식으로 의미 있는 데이터를 추출하려고 합니다. 이때 doc,csv,pdf의 데이터 형식에 대한 처리는 다르지만 해당 데이터를 처리하고 분석하는 것은 동일할 것입니다. 알고리즘 구조를 그대로 두고 코드 중복을 제거하는 것이 좋을 것입니다. 클라이언트 코드와 관련된 또 다른 문제가 있었습니다. 처리 대상의 클래스에 따라 적절한 조치를 취하는 조건문이 많이 있을 수 있습니다. 세 가지 처리 클래스 모..
옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. 이 패턴의 핵심은 옵저버 또는 리스너(listener)라 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시킨다. 그리고 각각의 옵저버들은 관찰 대상인 객체가 발생시키는 이벤트를 받아 처리한다. Subject(관찰 대상자)의 역할 Subject는 "관찰되는 대상" 을 나타냅니다. Subject 역할은 관찰자인 Observer 역할을 등록하는 메소드와 삭제하는 메서드를 갖고..
메멘토 패턴(memento pattern)은 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 소프트웨어 디자인 패턴이다. 예를 들어, 텍스트 에디터를 사용 시 필요한 텍스트를 실수로 삭제했어도 'undo(실행취소)'라는 기능을 사용하면 삭제하기 전의 상태로 텍스트를 복원할 수 있습니다.객체 지향 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있고 저장만 하지 않고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 합니다. 인스턴스를 복원하기 위해서는 인스턴스 내부의 정보를 자유롭게 액세스 할 수 있어야 하지만 원하지 않는 액세스를 허용하면 클래스 내부 구조에 의존한 코드가 프로그램의 여기저기로 흩어져서 클래스의 수정을 어렵게 만듭니다.이것을 캡슐화의 파괴라고..
Iterator 패턴이란? 내부 표현 방법을 노출하지 않고 집합체(리스트, 스택, 트리 등)의 원소를 순차적으로 접근할 수 있는 방법을 제공하는 패턴 컬렉션은 프로그래밍에서 가장 많이 사용되는 데이터 유형중 하나인데 객체를 담을 수 있는 컨테이너입니다. 어떤 요소를 리스트, 스택, 트리 등 다양한 데이터 구조를 기반으로 한 컨테이너에 담을 수 있습니다. 하지만 컬렉션이 어떻게 구조화되든 간에 다른 코드가 이러한 요소를 사용할 수 있도록 해당 요소에 접근할 수 있는 방법을 제공해야 합니다. 하나의 요소에 계속 접근하는 것이 아닌 컬렉션의 요소를 순차적으로 접근하는 방법이 있어야 합니다. 리스트 형태를 기반한 컬렉션은 이 작업이 쉽울수 있지만, 트리나 다른 형태의 컨테이너에서는 쉽지 않을 수 있습니다. 그러..