3-1공부/소프트웨어공학론

기말3. 디자인 패턴

KGW2027 2022. 5. 10. 11:09
728x90
반응형

Design Pattern 이란?

 반복해서 재사용 가능한 문제해결 패턴으로, Creational, Structural, Behavioral의 3가지 타입으로 나뉜다.

1. Creational Design Pattern

  • Factory Method Pattern
    - 구체적인 클래스 이름을 직접적으로 명시하지 않고 객체를 생성하기 위한 수단.
    - 실제 객체는 Factory class의 abstract method를 상속해 구현한 자식 클래스에서 생성된다.
    - 객체의 클래스명 변경, 인수 개수나 인수 타입의 변경등으로 인해 발생할 의존성 문제를 예방한다.
  • Abstract Factory Pattern
    - 여러 개의 Factory Metohd Pattern을 모아둔 것이다.
    - User Init() -> Abstract Factory Pattern (1) -> Factory Method Pattern (N) -> Initialize Instance
  • Singleton Pattern
    - 한 클래스에 대해 한 객체만 존재하게 하는 패턴. ( 유일성 보장 )


2. Structural Design Pattern

  • Adapter pattern
    - 호환되지 않는 Legacy Class를 일관성있게 사용하기 위한 방법.
    - 현재 사용하는 Interface A.run(), Legacy Interface B.execute()가 있을 때, BAdapter Class에서 A를 상속받은 뒤,
     B Object를 안에서 구현하고, BAdapter.run()에서 B.execute()를 실행한다.
  • Composite Pattern
    - 비슷한 구현을 가지는 클래스들을 모아서 사용하기 위한 방법
    - 특정 기계의 가격을 구하기 위해 각 부품의 가격을 수집할 때, MachinePrice Class안에서 모든 작업을 처리하면 확장성이나 유동성이 떨어짐.
    - 이를 해결하기 위해, abstract getPrice(); 등이 들어간 abstract class를 구현 한 후, 기계마다 이를 상속해서 가격을 반환하게 만들고 총 가격 구현도 이를 상속받아서 구현한다.


3. Behavior Design Pattern

  • Iterator Pattern
    - 반복작업을 캡슐화하여, ArrayList내의 데이터 구성방식이 변경되어도 일관적인 사용이 가능하다.
    - Iterator는 ArrayList와 달리 이전 데이터의 참조 없이 현재 데이터를 접근할 수 있지만, 생성과정에서 많은 작업이 일어나기 때문에 속도적인 향상은 없다.
    ( ArrayList는 Key 5를 접근하기 위해 1->2->3->4->5(Return), Iterator는 현재 Key가 5라면 1~4의 접근 없이 key 5의 데이터를 바로 가져옴 )
  • Observer Pattern
    - 이벤트 Listener를 구현하는 방식.
    - Observer에 한 번에 작동해야 하는 클래스를 모두 등록해놓고, Observer에서 event를 실행하면 등록된 클래스에 그 event를 모두 전달한다.
  • State Pattern
    - 상태 변경에 대해 Switch-case 검사의 형태가 아니라, 현재 상태와 상태를 변경하기 위한 작동을 추상화한다.
    - On/Off 버튼에 대한 동작을 구현할 때, Switch-case의 경우 switch(현재상태){case 상태1: ...}의 형태로 구현되므로, 새로운 상태를 구현하기 위해서는 On/Off 버튼의 Switch-case에 조건을 추가해야한다.
    - State Pattern의 경우, On/Off 버튼의 동작을 구현한 상태1, 상태2 class를 이용한다.
    setState(onState); // curState = onState;
    curState.pressOn() / curState.pressOff()를 구현.
  • Facade Pattern
    - Subclass들을 관리하는 FacadeClass를 구현한다.
    - 클라이언트가 직접 subclass들을 관리할 필요 없이, FacadeClass에 인수를 전달함으로써 간단하게 사용한다.
  • Decorator Pattern
    - 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
    - 상위 개체를 상속하고 super()하는 방식으로 자주 사용함.

 

728x90
반응형