[이론] OOP - 디자인 패턴

조민수·2024년 11월 4일
0

개발 이론

목록 보기
11/12

디자인 패턴 - Design Pattern

디자인 패턴이란,
소프트웨어를 개발 및 설계하며 자주 발생하는 반복적 문제를 해결책을 제공하는 템플릿이다.

즉, ~~한 상황에서는 OO을 사용하면 좋다! 정도의 패턴화된 해결책을 개발자에게 제공하는 것

객체지향의 특성(추상화, 캡슐화, 다형성, 상속) 및 SOLID 원칙을 기반으로 구현되어있다.

크게 생성(Creational), 구조(Structural), 행위(Behavioral)로 구분지을 수 있다.


장점

  1. 재사용성 : 반복적인 문제에 대해 일반적인 해결책을 제공한다.
    이를 통해 유사한 상황을 쉽게 해결할 수 있다.
  2. 가독성 : 일정 구조로 정리하여 코드에 대한 이해 및 유지보수성을 높인다.
  3. 유지보수성 : 코드를 쉽게 모듈화 할 수 있으며,
    변경이 필요한 경우 해당 모듈만 수정한다.
  4. 확장성 : 새로운 기능을 추가 및 변경할 때 기존 코드에 대한 변화를 최소화하며 확장할 수 있다.
  5. 안정성 및 신뢰성 : 패턴화한 사례를 통해 검증된 솔루션을 제공한다.

단점

  1. 초기 투자 비용의 부담 : 초기 설계 및 개발 과정에서 시간적 소모가 많이 필요하다.
  2. 기술적 허들 : 다양한 패턴을 학습하고 적용하는데 일정 수준 이상의 기술적 역량이 수반된다.

디자인 패턴의 구성 요소

  • Context : 문제가 발생하는 상황, 패턴이 적용될 수 있는 상황
  • Problem : 패턴을 적용해 해결할 수 있는 디자인 이슈
    이때, 여러 Constraints 및 영향력을 함께 고려
  • Solution : 문제를 해결하도록 설계를 구성하는 요소들 및 요소들 간의 관계, 책임, 협력 관계
  • Result : 패턴 사용의 결과, 이점 및 잠재적 단점 포함

생성 패턴 : Creational Patterns

객체의 생성, 조합을 캡슐화하여, 특정 객체의 생성 및 변경에 프로그램의 구조가 크게 영향을 받지 않도록 유연성을 제공

  1. Singleton : 싱글톤
  • 어떤 클래스의 인스턴스는 하나임을 보장하고
    이를 전역에서 접근 가능하게 해,
    해당 인스턴스가 한 번만 생성되도록 보장하는 패턴
  1. Factory Method : 팩토리 메소드
  • 객체 생성을 서브 클래스(하위 클래스)로 위임
  1. Abstract Factory : 추상 팩토리
  • 구체적인 클래스 지정없이, 관련된 객체 그룹을 생성할 수 있게 인터페이스를 제공
  1. Builder : 빌더
  • 복합 객체의 생성을 단계적으로 수행하며, 동일한 생성 절차에서도 다른 표현 결과를 만들어낼 수 있게함
  1. Prototype : 프로토타입
  • 기존 객체를 복사해 새로운 객체 생성

구조 패턴 : Structural Patterns

클래스와 객체를 조합해 더 큰 구조를 형성하며, 코드의 확장성과 유연성을 높임

  1. Adapter : 어댑터
  • 서로 다른 인터페이스를 가진 객체 간의 호환을 위해 Wrapper를 제공
  1. Bridge : 브리지
  • 추상화와 구현을 분리해 독립적으로 확장할 수 있게함
  1. Composite : 컴포지트
  • 복합 객체와 단일 객체를 동일 취급해 트리 구조로 객체들의 관계를 표현
  1. Decorator : 데코레이터
  • 주어진 상황 및 용도에 따라 객체에 동적으로 기능을 추가해 확장
  1. Facade : 퍼사드
  • 복잡한 서브 시스템에 간단한 통합 인터페이스를 제공해 사용성을 향상
  1. Flyweight : 플라이웨이트
  • 공유 가능한 객체를 활용해 크기가 작은 여러 객체를 매번 생성하지 않으며 메모리 사용을 감소
  1. Proxy : 프록시
  • 객체 사이에 Proxy 객체(대리 객체)를 두어 간접적 접근 제공

행위 패턴 : Behavioral Patterns

객체 간의 상호작용과 책임 분산을 다루어 결합도(Coupling)을 줄이고, 코드의 유연성을 높임

  1. Observer : 옵저버
  • 한 객체의 상태 변화가 발생하면, 관련 객체들에게 자동으로 변화를 통지해 갱신
  1. Strategy : 스트레이트지
  • 동일 계열 알고리즘을 개별 클래스로 분리 정의해, 동적으로 교체하고 상호교환을 가능하게 함
  1. Command : 커맨드
  • 요청 작업을 캡슐화하여 객체로 변환해 재사용 및 취소할 수 있게 저장
  1. Template Method : 템플릿 메소드
  • 상위 클래스는 알고리즘의 구조만 정의, 세부 구현은 하위 클래스에서 처리
  1. Chain of Responsibility : 책임 연쇄
  • 요청을 처리할 객체를 결정하지 않고 전달하며, 처리 가능한 객체를 만날 때까지 객체 Chain을 따라 요청 전달
  1. Memento : 메멘토
  • 객체의 내부 상태를 실체화 및 저장해, 특정 상태로 다시 복원할 수 있게함
  1. Iterator : 반복자
  • 집합체의 요소를 순차적으로 접근할 수 있게 함
  • 내부를 노출하지 않고, 객체의 원소를 순차적으로 접근할 수 있는 동일 인터페이스 제공
  1. Meditator : 중재자
  • 객체 간의 통신을 중개하여 직접적 의존성을 줄이고, 느슨한 결합 유지
  • 객체 간의 상호작용을 캡슐화해 새로운 객체(중재자 객체) 정의

요약

  • 생성 패턴은 객체의 생성 방식에 유연성을 제공
  • 구조 패턴은 클래스와 객체를 조합해 더 큰 구조를 형성, 확장성 제공
  • 행위 패턴은 객체 간의 상호작용 및 책임 분산을 정의

아키텍처 패턴과 디자인 패턴의 차이

아키텍처 패턴

  • 시스템 전체의 구조적 틀을 제공해 전체 컴포넌트 간의 상호작용 정의
  • 주로 소프트웨어 설계 초기 단계에서 결정

디자인 패턴

  • 주로 모듈 또는 클래스 수준에서 적용, 특정 문제 상황에 대해 객체 간의 관계 및 상호작용 최적화에 초점
  • 주로 개발 중반이나 후반에 구체적인 기능을 구현하는 과정에서 발생하는 문제에 대한 해결책 및 방안

아키텍처 패턴은 디자인 패턴보다 상위 수준의 설계


마치며...

다음엔 React환경에서 디자인 패턴이 적용되는 사례에 대해 알아보겠다.

[참고자료]

profile
사람을 좋아하는 Front-End 개발자
post-custom-banner

0개의 댓글