본문으로 건너뛰기

디자인 패턴

· 약 6분

💡 다음 내용은 chatGPT를 기반으로 작성된 내용으로, 부정확한 정보가 있을 수 있습니다.


디자인 패턴(Design Pattern)

  • 디자인 패턴(Design Pattern)은 소프트웨어 설계에서 반복적으로 발생하는 문제를 해결하기 위한 모범 사례나 방법론
  • 프로그래밍에서도 자주 사용되는 문제를 효율적으로 해결하기 위해 만들어진 재사용 가능한 설계 틀

왜 디자인 패턴을 배워야 할까?

  1. 효율적인 문제 해결
  • 이미 검증된 솔루션을 활용해 개발 시간 단축
  1. 가독성 및 유지보수 향상
  • 코드를 체계적으로 설계하고 팀원들이 이해하기 쉽게 만듦
  1. 유연성과 확장성 확보
  • 변화하는 요구 사항에 따라 코드를 쉽게 확장 가능

디자인 패턴의 특징

  • 재사용 가능성: 설계 패턴을 통해 코드를 여러 프로젝트에서 반복적으로 활용 가능
  • 문제 해결 능력: 특정 상황에서 흔히 발생하는 문제를 해결하는 최적의 방법 제공
  • 유지보수 용이: 코드의 구조를 체계적으로 설계하므로 변경과 유지보수가 쉬움
  • 커뮤니케이션 도구: 팀원 간 협업 시, 공통된 언어로 설계 방식을 빠르게 이해 가능

디자인 패턴의 분류

디자인 패턴은 크게 생성, 구조, 행위 패턴의 세 가지로 나뉨

1. 생성 패턴 (Creational Patterns)

  • 객체를 생성하는 과정을 캡슐화하여 코드에서 객체 생성 과정을 단순화하거나 유연하게 만드는 패턴
  • 예: 공장에서 물건을 찍어내듯 객체를 생성
1) 팩토리 메서드 (Factory Method)
  • 특정 클래스의 인스턴스를 생성하는 방법을 서브클래스에서 결정
  • 예: 다양한 종류의 버튼(UI) 생성
2) 싱글톤 (Singleton)
  • 클래스의 인스턴스를 단 하나만 생성하도록 제한
  • 예: 데이터베이스 연결 객체
3) 빌더 (Builder)
  • 복잡한 객체를 단계별로 생성하며, 같은 생성 과정에서 다양한 객체를 생성
  • 예: HTML 페이지 생성기
4) 추상 팩토리 (Abstract Factory)
  • 관련 객체들의 군을 생성하는 인터페이스 제공
  • 예: 윈도우와 맥OS에 맞는 UI 컴포넌트 생성
5) 프로토 타입 (Prototype)

2. 구조 패턴 (Structural Patterns)

  • 클래스나 객체를 조합하여 더 큰 구조를 형성하고, 효율적인 설계를 지원하는 패턴
  • 예: 레고 블록처럼 다양한 객체를 조합해 구조를 만듦
1) 어댑터 (Adapter)
  • 서로 다른 인터페이스를 가진 클래스가 함께 동작하도록 변환
  • 예: 110V와 220V 전기 변환 어댑터
2) 데코레이터 (Decorator)
  • 객체에 동적으로 기능을 추가할 수 있도록 설계
  • 예: 텍스트에 꾸밈 기능 추가(색상, 밑줄)
3) 프록시 (Proxy)
  • 접근 제어나 성능 향상을 위해 객체 대리자를 제공
  • 예: 캐싱 프록시 서버
4) 컴포지트 (Composite)
  • 객체를 트리 구조로 구성하여 부분-전체 관계를 표현
  • 예: 파일 시스템(폴더 안에 파일 및 하위 폴더)
5) 퍼사드 (Facade)
6) 브리지 (Bridge)
7) 플라이웨이트 (Flyweight)

3. 행위 패턴 (Behavioral Patterns)

  • 객체 간의 상호작용과 책임 분담을 정의하는 패턴
  • 예: 여러 배우(객체)가 소통하며 연극(프로그램)을 진행
1) 옵저버 (Observer)
  • 어떤 객체의 상태 변화에 따라 의존 객체들에게 자동으로 알림
  • 예: 뉴스 구독 시스템
2) 전략 (Strategy)
  • 행위를 캡슐화하여 동적으로 행위 알고리즘을 변경 가능
  • 예: 정렬 알고리즘 선택(버블, 퀵, 삽입)
3) 커맨드 (Command)
  • 요청을 객체로 캡슐화하여 실행 취소와 요청 큐 등을 지원
  • 예: 유니버설 리모컨(볼륨 조절, 채널 변경)
4) 템플릿 메서드 (Template Method)
  • 알고리즘의 구조를 정의하고, 세부 구현은 서브클래스에서 수행
  • 예: 게임의 턴 기반 실행
5) 책임 연쇄 (Chain of Responsibility)
6) 인터프리터 (Interpreter)
7) 미디에이터 (Mediator)
8) 스테이트 (State)
9) 비지터 (Visitor)