본문 바로가기

Study/Design Pattern

[Pattern] 디자인 패턴 개요

디자인 패턴 개요

목적

SW의 재사용성, 호환성, 유지 보수성을 보장하기 위함.


특징

디자인 패턴은 특정한 구현이 아닌 아이디어이다.

무조건 적용해야 한다! 가 아니고 추후에 재사용, 호환, 유지 보수시 발생하는 문제를

예방하거나 해결하기 위해 패턴을 만들어 둔 것.


원칙 - SOLID(객체지향 설계 원칙)

Robert C. Martin은 5가지 Software design principles을 정의하고 앞글자를 따서 SOLID라고 부른다.

  1. Single Responsiblilty Principle : 하나의 클래스는 하나의 역할만 해야한다.
  2. Open - Close Principle : 확장(상속)에는 열려있고, 수정에는 닫혀 있어야 한다.
  3. Liskov Substitution Principle : 자식이 부모의 자리에 항상 교체될 수 있어야 한다.
  4. Interface Segregation Principle : 인터페이스가 잘 분리되어, 클래스가 꼭 필요한 인터페이스만 구현하도록 해야한다.
  5. Dependency Inversion Property : 상위 모듈이 하위 모듈에 의존하면 안된다, 모두 추상화에 의존하며, 추상화는 세부 사항에 의존하면 안된다.

분류

  1. 생성 패턴(Creational) : 객체의 생성 방식 결정

    ex) DB커넥션을 관리하는 Instance를 하나만 만들 수 있도록 제한, 불필요한 연결을 막음

  2. 구조 패턴(Structural) : 객체간의 관계를 조직

    ex) 2개의 인터페이스가 서로 호환되지 않을 때, 둘을 연결해주기 위해 새로운 클래스를 만들어 연결시킬 수 있도록 한다.

  3. 행위 패턴(Behavioral): 객체의 행위를 조직, 관리 연합

    ex) 하위 클래스에서 구현해야 하는 함수 및 알고리즘들을 미리 선언하여, 상속 시 이를 필수록 구현하도록 한다.


Design Smells

Design Smell이란 나쁜 디자인을 나타내는 증상 같은 것.

1. Rigidity (경직성)

  • 시스템이 변경하기 어려움.
  • 하나의 변경을 위해 다른것을 변경할 때 경직성이 높음.
  • 경직성이 높으면 문제가 발생했을때 수정하기 힘듦.

2. Fragility (취약성)

  • 취약성이 높다면 어떤 부분을 수정했을 때 다른 부분에 영향을 줌.
  • 비용이 커지며 시스템의 credibility 또한 잃음.

3. Immobility (부동성)

  • 부동성이 높다면 재사용하기 위해 시스템을 분리해 컴포넌트를 만드는 것이 어려움.
  • 주로 개발자가 이전에 구현되었던 모듈과 비슷한 기능을 하는 모듈을 만드려 할 때 문제점을 발견함.

4. Viscosity (점착성)

  • 점착성은 디자인 점착성환경 점착성으로 나눌 수 있음.
  • 개발환경에 지나친 의존성을 가지는 상황을 말한다.
  • 설계를 유지한 상태에서 변경하기 쉽도록 설계할 때 발생 -> 디자인 점착성
  • 개발환경이 느리고 효율적이지 못할 때 나타난다 -> 환경 점착성

위의 Design Smell은 나쁜 디자인을 의미(스파게티 코드)

5. Needless Complexity (불필요한 복잡성)

  • 당장 필요하지 않은 코드 구조가 존재하는 상황.
  • 언젠가는 유용할지도 모르는 코드도 포함된 상황을 말한다.

6. Needless Repetition (불필요한 반복)

  • 복붙으로 생상된 코드가 혼재하는 상황을 말한다.

7. Opacity (불투명성)

  • 혼란스러운 표현, 읽고 이해하기 어렵다.
  • 의도를 잘 표현하지 못한다
  • 시간이 지남에 따라 발전하는 코드는 시간이 지날수록 점점 더 불투명해지는 경향이 있다.

'Study > Design Pattern' 카테고리의 다른 글

[Pattern] Factory Method Pattern  (0) 2022.01.15
[Pattern] Template Method Pattern  (0) 2022.01.15
[Pattern] Singleton Pattern  (0) 2022.01.15
[Pattern] Adapter Pattern  (0) 2022.01.15
[WEB] MVC패턴  (0) 2021.10.14