etc

[Design Pattern] 디자인 패턴이란?

멍목 2022. 3. 29. 01:06
반응형

안녕하세요. 이번 포스팅에서는 디자인 패턴에 대해서 공부한 내용을 적어보려고 합니다.


Design Pattern

  • 객체 지향 프로그래밍 설계 시, 자주 발생하는 문제들을 예방하기 위해 사용하는 일종의 설계 방법
  • SW 재사용성, 호환성, 유지보수성을 보장
  • 디자인 패턴은 구현이 아니라 설계하는 방법을 의미함.
  • 개발 시에 꼭 적용해야하는 것은 아님. 
    • 하지만, 추후에 재사용, 호환성, 유지보수 시에 발생하는 문제를 예방하기 위해 디자인 패턴을 이용하는 것

 

 

객체지향 설계 원칙(SOLID)

    1. Single Responsibility Principle(단일 책임 원칙)
      • 하나의 클래스는 하나의 역할만 해야 함
    2. Open - Close Principle(개방-폐쇄 원칙)
      • 확장(상속)에는 열려있고, 수정에는 닫혀있어야 함
    3. Liskov Substitution Principle(리스코프 치환 원칙)
      • 자식이 부모의 자리에 항상 교체될 수 있어야 함
    4. Interface Segregation Principle(인터페이스 분리 원칙)
      • 인터페이스가 잘 분리되어서 클래스가 필요한 인터페이스만 구현하도록 해야 함
    5. Dependency Inversion Property(의존관계 역전 원칙)
      • 상위 모듈이 하위 모듈에 의존하면 안됨

 

디자인 패턴의 종류 3가지

  1. 생성 패턴 : 객체의 생성 방식을 결정
    • 싱글톤 패턴, 팩토리 패턴 등
    • ex) DB Connection을 관리하는 인스턴스를 하나만 만들 수 있도록 제한하여, 불필요한 연결을 막음
  2. 구조 패턴 : 객체간의 관계를 조직
    • 어댑터 패턴 등
    • ex) 2개의 인터페이스가 서로 호환되지 않을 때, 둘을 연결해주기 위해 새로운 클래스를 만들어 연결 
  3. 행위 패턴 : 객체의 행위를 조직, 관리, 연합
    • 옵저버 패턴, 전략 패턴, 템플릿 메소드 패턴등
    • ex) 하위 클래스에서 구현해야 하는 함수 및 알고리즘을 미리 선언하여, 상속 시 이를 필수로 구현하도록 함

 

생성 패턴

1. 싱글톤 패턴

개요

- 하나의 인스턴스만 생성하여 사용하는 디자인 패턴

- 인스턴스가 필요할 때, 같은 인스턴스를 생성하지 않고 기존에 만들었던 인스턴스를 사용하는 패턴

- 인스턴스가 절대적으로 한 개만 존재하는 것을 필요로 할 때 사용

 

장점

- 객체를 생성할 때마다 메모리를 할당받는데, 하나의 객체만 이용하여 메모리 낭비를 방지할 수 있음

- 싱글톤으로 구현한 인스턴스는 '전역' 이므로, 데이터를 공유하는 것이 가능

 

단점

- 싱글톤 인스턴스가 혼자서 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지는데, 이 때 개방-폐쇄 원칙이 위배됨

- 결합도가 높아지면, 유지보수와 테스트가 어려워짐

 

주로 사용하는 경우

- DB에서의 커넥션풀, 스레드풀, 캐시, 로그 기록 객체 등

 

멀티스레드 환경에서 안전한 싱글톤 만드는 법

- 클래스 안에 클래스(holder)를 두어 JVM의 클래스 로더 매커니즘과 클래스가 로드되는 시점을 이용

 

2. 팩토리 메소드 패턴

- 객체를 만드는 부분을 하위 클래스에서 구현한 패턴

 

 

구조 패턴

1. 어댑터 패턴

- 클래스를 바로 사용할 수 없을 때, 사용할 수 있게 중간에서 변환해주는 역할

- ex) 아이폰의 이어폰 잭을 생각해보면, 일반적인 이어폰 잭은 아이폰과 맞지 않는다. → 어댑터를 이용해서 이용 가능

 

 

행위 패턴

1. 옵저버 패턴

- 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고, 자동으로 정보가 갱신되는 1:N 관계(혹은 1대1)를 정의

- 상태를 가지고 있는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체

- 서로의 정보를 주고받는 과정에서 정보의 단위가 크고 객체들의 규모가 클수록 복잡성이 증가 → 옵저버 패턴이 가이드라인을 제시

 

2. 전략 패턴

- 어떤 동작을 하는 로직을 정의하고, 이것들을 캡슐화하여 관리하는 패턴

 

3. 템플릿 메소드 패턴

- 로직을 단계 별로 나눠야 하는 상황에서 적용하며, 이 로직들이 수정될 가능성이 있으면 더욱 효율적


Reference

https://gyoogle.dev/blog/design-pattern/Overview.html

반응형