관리 메뉴

사과하는 제라스

[소프트웨어 분석 및 설계] 9. Design Patterns 본문

대학 전공 공부/소프트웨어 분석 및 설계

[소프트웨어 분석 및 설계] 9. Design Patterns

Xerath(제라스) 2022. 12. 15. 00:04

목차

    728x90
    반응형

    Design Pattern이란?

    SW를 개발 시 Context에서 발생할 수 있는 Problem과 이에 대한 Solution이다.

    또한, 이를 통해 성공적인 SW 구조 및 디자인을 재사용할 수 있다.

     


    Classification of Design Patterns 

    1) Creational Patterns

    : 클래스와 객체의 초기화와 설정을 함.

    2) Structural Patterns

    : 클래스와 객체의 interface와 implementation(인터페이스를 구체화한 실행체)를 분리함.

    -> 여러 객체들을 집합화하는데에 쓰임.

    3) Behavioral Patterns

    : 클래스와 객체들 간의 dynamic interaction을 다룸.

    Design Pattern 원칙

    디자인 패턴을 개선하기 위한 3원칙이 있다!

     

    1) interface와 implementation을 분리하라.

     

    2) common interface를 통해 가변적인 implementation을 대신하라.

     

    3) 무엇이 common(stable, closed)인지, 무엇이 variable(unstable, to be resolved, opened)인지 구분하라.

    -> Open Closed Principle(OCP)

    Open / Closed Principle(Principle 3)

    Application을 커스터마이징하기 위해선 insufficient variable를 줄여야 함.

    그러므로 컴포넌트는...

     

    커스터마이징, 확장에 대해서는 Open,

    변경에 대해서는 Closed 해야 한다.

     

    Composite Design Pattern

    : 객체들을 트리 형태로 구성하여 part-whole 계층 구조를 나타냄.

    -> Recursive Composition이라고 부름

     

    - Component, Leaf, Composite, Client로 구성됨.

    - Composite Objects를 만드는데에 매우 효과적임.

     

    Observer Design Patterns

    : 객체들 간의 one-to-many dependency로 한 객체의 상태 변화가 생기면 관련된 것들이 인지하게 되고 자동으로 업데이트됨.

    이런 식으로 값이 변경되면 이 값을 이용하는 다른 곳들도 다 바뀌어야 함.

    Strategy Design Pattern

    : 각각을 캡슐화시키고 상호 교환 가능하게 만들어서 알고리즘 집단을 정의함.

     

    이거 왜 생김?

    코드들 보면 되게 다양한데 기능마다 일일이 함수짜고(linebreaking) 조건에 따라 그거 실행하잖아?

    그거 유지보수하는데에 되게 별로임.

     

    그럼 언제씀?

    알고리즘에 다양성, 가변성이 필요할 때~

    -> 기능은 동일하지만 방법은 다른 것들을 각 Strategy로 만들 수 있음.

    - Context, Strategy(모든 ), ConcreteStrategy로 구성됨.

    - Control flow(Runtime execute order)-> 이건 fix(확정)되어있음.

    - 객체 지향의 동적 바인딩 원리에 의해서 선택된 ConcreteStrategy에 포함된 메소드가 실행이 됨.

    Template Method Design Pattern

    : 앞서 배운 건 다 Class에 대한 디자인 패턴인데 이건 메소드에 대한 디자인 패턴임.

    알고리즘 구조는 유지하면서 서브 클래스들에서 일부 알고리즘 내 step들만(즉, 실행되는 함수 내에서 작동하는 일부 함수들만을) 재정의해서 쓰는 것임.

     

    이거 왜 생김?

    함수들의 실행 순서는 유지하고 싶은데 함수 자제의 기능을 수정하고 싶을 경우가 있잖슴~~

    - 절차는 정해져 있다! 몇몇 operation들만 variable하다.

    - AbstractClass, ConcreteClass로 구성됨.

     

    잘 적용될 수 있는 경우들이 정해져 있음. 따라서 필요한 경우에 맞춰서 알맞은 Design Pattern을 사용해야 함!

    728x90
    반응형