ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [정보처리기사 필기] 디자인 패턴 (Design Pattern), 행위 패턴(1)
    CS/정보처리기사 2023. 8. 16. 13:13
    반응형

     

    행위 패턴

     

    ① 중재자(Mediator)

    • 객체 지향 설계에서 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 객체 지향에서 가장 중요한 느슨한 결합의 특성을 해칠 수 있기 때문에 이를 해결하는 방법으로 중간에 이를 통제하고 지시할 수 있는 역할을 하는 중재자를 두고, 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴
    • 상호 작용의 유연한 변경을 지원

     

        ▶ Mediator 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch16/

     

        ▶ 등장역할

    등장인물 역할
    Mediator(중재자)의 역할 - Colleague 역할과 통신을 해서 조정을 실행하기 위한 인터페이스(API)를 결정
    ConcreteMediator(구체적인 중재자)의 역할 - Mediator 역할의 인터페이스(API)를 구현해서 실제의 조정을 실행
    Colleague(동료)의 역할 - Mediator 역할과 통신을 실행할 인터페이스(API)를 결정
    ConcreteColleague(구체적인 동료)의 역할 - Colleague 역할의 인터페이스(API)를 구현

     

     

    ② 인터프리터(Interpreter)

    • 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
    • 문법 자체를 캡슐화하여 사용

     

        ▶ Interpreter 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch23/

     

        ▶ 등장역할

    등장인물 역할
    AbstractExpression(추상적인 표현)의 역할 - 구문 트리의 노드에 공통의 인터페이스(API)를 결정하는 역할
    TerminalExpression(종착점 표현)의 역할 - BNF의 Terminal Expression에 대응하는 역할
    NonterminalExpression(비종착점 표현)의 역할 - BNF의 Nonterminal Expression에 대응하는 역할
    Context(문맥, 전후 관계)의 역할 - 인터프리터가 구문해석을 실행하기 위한 정보를 제공하는 역할
    Client(의뢰자)의 역할 - 구문 트리를 조립하기 위해서 TerminalExpression과 NonterminalExpression을 호출하는 역할

    ※ BNF란? Backus-Naur Form 또는 Backus Normal Form, 프로그래밍 언어의 구문을 명시하기 위하여 일반적으로 사용되는 표기법

     

     

    ③ 이터레이터(Iterator)

    • 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴
    • 내부구조를 노출하지 않고, 복잡 객체의 원소를 순차적으로 접근 가능하게 해주는 행위 패턴

     

        ▶ Iterator 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch01/

     

        ▶ 등장역할

    등장인물 역할
    Iterator(반복자)의 역할 - 요소를 순서대로 검색해가는 인터페이스(API)를 결정
    ConcreteIterator(구체적인 반복자)의 역할 - Iterator가 결정한 인터페이스(API)를 실제로 구현
    Aggregate(집합체)의 역할 - Iterator 역할을 만들어내는 인터페이스(API)를 결정
    ConcreteAggregate(구체적인 집합체)의 역할 - Aggregate 역할이 결정한 인터페이스(API)를 실제로 구현하는 일
    - ConcreteIterator 역할의 인스턴스를 만들어 냄

     

     

    ④ 템플릿 메서드(Template Method)

    • 어떤 작업 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴으로 일반적으로 상위 클래스(추상 클래스)에는 추상 메서드를 통해 기능의 골격을 제공하고, 하위 클래스(구체 클래스)의 메서드에는 세부 처리를 구체화하는 방식으로 사용하며 코드 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 디자인 패턴
    • 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분을 수행

     

        ▶ Template Method 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch03/

     

        ▶ 등장역할

    등장인물 역할
    AbstractClass(추상 클래스)의 역할 - 템플릿 메서드를 구현
    - 템플릿 메서드에서 사용하고 있는 추상 메서드를 선언
    ConcreteClass(구현 클래스)의 역할 - AbstractClass 역할에서 정의되어 있는 추상 메서드를 구체적으로 구현

     

     

    ⑤ 옵저버(Observer)

    • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신되는 방법으로 일대 다의 의존성을 가지며 상호 작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인 패턴
    • 객체의 상태 변화에 따라 다른 객체의 상태도 연동, 일대다 의존

     

        ▶ Observer 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch17/

     

        ▶ 등장역할

    등장인물 역할
    Subject(관찰 대상자)의 역할 - '관찰되는 쪽'을 나타냄
    - Observer 역할을 등록하는 메서드와 삭제하는 메서드를 가짐
    - 현재의 상태를 얻어갈 때 호출하는 메서드도 제공
    ConcreteSubject(구체적인 대상자)의 역할 - 구체적인 '관찰되는 쪽'을 나타냄
    - 상태가 변하면, 등록된 Observer 역할에게 통보함
    Observer(관찰자)의 역할 - '관찰하는 쪽'을 나타냄
    - Subject 역할로부터 상태변화를 통보받는 역할
    ConcreteObserver(구체적인 관찰자)의 역할 - 구체적인 '관찰하는 쪽'을 나타냄
    - 상태변화가 관찰 대상으로부터 통보되면(즉, update 메서드가 호출되면) 그 메서드 안에서 Subject 역할의 현재 상태를 얻어서 적당한 일을 수행

     

     

    ⑥ 스테이트(State)

    • 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여, 변경 시 원시 코드의 수정을 최소화할 수 있고, 유지보수의 편의성도 갖는 디자인 패턴
    • 객체의 상태에 따라 행위 내용을 변경

     

        ▶ State 패턴의 클래스 다이어그램

    https://eliotjang.github.io/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B3%B5%ED%95%99/design-pattern-ch19/

     

        ▶ 등장역할

    등장인물 역할
    State(상태)의 역할 - 상태를 나타내는 역할
    - 각 상태에 따라 다른 행동을 하는 통일된 인터페이스(API)를 결정함
    ConcreteState(구체적인 상태)의 역할 - 구체적인 개개의 상태를 표현하는 역할
    - State 역할이 결정한 인터페이스를 구현함
    Context(상황)의 역할 - 현재의 상태를 나타내는 ConcreteState 역할을 가지고 있음
    - State 패턴 이용자가 필요로 하는 인터페이스를 결정함

     

     

    Reference

     

    2022 수제비 정보처리기사 필기 1권+2권 합본세트 - 전2권

    IT 비전공자를 위해 만들어진 수험서다. IT 분야의 최고 전문가 집단의 오랜 연구를 통한 정보처리기사 합격까지의 최단기 솔루션을 제안한다. 중요도에 따른 별점 체크, 두음쌤을 통한 암기비법

    www.aladin.co.kr

     

    Java 언어로 배우는 디자인 패턴 입문 - 예스24

    이 책은 디자인 패턴의 입문서입니다. GoF가 정리한 23개의 디자인 패턴을 하나씩 다루면서 객체 지향을 잘 모르는 초보자도 이해하기 쉽도록 정리하고 있습니다. 단순한 이론이나 논리을 제시하

    www.yes24.com

     

    반응형
Designed by Tistory.