Develop

26일차_Design Pattern(Adapter / Strategy / Template Method / Template Callback) 본문

백엔드/KDT_Programmers

26일차_Design Pattern(Adapter / Strategy / Template Method / Template Callback)

230801 2025. 4. 9. 03:00

안녕하세요.

 

오늘은 4/8(화) 데브코스 26일차(6주 2일차) 입니다.

상기 제목의 디자인 패턴 4가지에 대해서 학습했고, 개인적으로  팩토리 메서드 패턴에 대해서 공부했습니다.

 

디자인 패턴에 대해 정리가 잘되어있는 사이트 공유 드립니다. (윤철님 감사합니당)

https://refactoring.guru/ko/design-patterns

 

디자인 패턴은 공부하다보니 느낀점은 부모를 상속받아서 구현을 강제하냐/안하냐 차이로 아주 미세하게 다른 것 같습니다..

그리고 내용이 많아서 1개 공부하는데도 시간이 많이걸리는데 23개나 있다니... 놀랄 노 자 입니다..

 

 


Design Pattern

디자인 패턴의 개념은 1994년,  `디자인패턴 :재사용성을 지닌 객체지향 소프트웨어의 핵심요소` 라는 책으로 정리됨

  • 작가 : Gang of Four (Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm)
  • 주 내용 : 다양한 객체지향 디자인 관련 문제를 해결하는 23가지 패턴

 

왜 패턴을 배워야 할까?

  • 디자인 패턴은 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책을 모은것으로,
    배워두면 객체지향 디자인의 원칙을 사용해 많은 종류의 문제를 해결하는 방법을 배울 수 있음
  • 팀원과 효율적으로 의사소통할 수 있음

 

패턴의 분류

  1. 복잡성, 상세도 및 설계 대상 범위에 따른 분류 (POSA 시리즈, Pattern-Oriented Software Architecture)
    • idioms : 하위 설계 패턴 (가장 기본적임)
      • 단일 프로그래밍 언어에만 적용 가능
    • architectural patterns : 상위 설계 패턴 (가장 보편적임)
      • 거의 모든 언어로 아키텍처 패턴 구현 가능
      • 다른 패턴들과 달리, 애플리케이션 전체의 구조(아키텍처) 를 설계하는 데 사용 가능
  2. 의도(목적)에 따른 분류 (GoF 패턴 분류)
    • 생성 패턴 (Creational patterns)
      : 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘(캡슐화)들을 제공

    • 구조 패턴 (Structural patterns )
      : 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명

    • 행동 패턴 (Behavioral patterns)
      : 객체간 효과적인 의사소통과 책임할당을 처리

 


GoF 패턴에서 일부를 알아보겠습니다.

 

1. 전략 패턴 (Strategy Pattern)

객체의 행위를 캡슐화해서, 런타임에 전략(알고리즘)을 바꿀 수 있도록 만든 패턴

 

  • 구성 요소
    • Strategy: 전략 인터페이스 (ex. WeaponStrategy)
    • ConcreteStrategy: 전략 구현체들 (ex. SwordStrategy, BowStrategy)
    • Context: 전략을 사용하는 주체 (ex. Player)

 

  • 적용 사례
    • 게임에서 무기/스킬 교체
    • 결제 수단 변경 (카드 / 카카오페이 등)

 

 

 2. 어댑터 패턴 (Adapter Pattern)

호환되지 않는 인터페이스를 연결해주는 패턴

 

  • 기존 클래스를 변경하지 않고 다른 인터페이스에서 사용할 수 있게 함
  • 유지보수/레거시 코드/외부 라이브러리 연동에 유용
  • 구성 요소
    • Target: 클라이언트가 기대하는 인터페이스
    • Adaptee: 실제 기능을 가진 기존 클래스
    • Adapter: Adaptee를 Target 인터페이스에 맞게 변환

 

 

3. 템플릿 메서드 패턴 (Template Method Pattern)

알고리즘의 골격(템플릿)은 부모 클래스에서 정해놓고, 구체적인 단계는 자식 클래스가 구현하도록 강제하는 패턴

 

  • 상속 기반 설계
  • 알고리즘 구조를 고정하고, 세부 로직만 다르게 커스터마이징 가능
  • 구성 요소
    • 추상 클래스: 알고리즘의 흐름을 정의하는 템플릿 메서드 포함
    • 자식 클래스: 세부 동작을 구현 (override 필수)

 

4. 템플릿 콜백 패턴 (Template Callback Pattern)

템플릿 메서드 패턴을 상속 대신 콜백(함수형/익명 객체/람다 등)으로 구현한 변형 패턴

 

  • GoF 패턴에는 없지만, Spring에서 자주 등장
  • 상속 대신 전략(콜백 객체/람다)을 인자로 주입하는 방식
  • **의존성 주입(DI)**와 궁합이 아주 좋음
  • 예시: JdbcTemplate

 

5. 팩토리 메서드 패턴 (Factory Method Pattern)

객체 생성을 하위 클래스에 위임하여, 상위 클래스는 객체 생성 방식에 대해 모르게 만드는 생성(Creational) 패턴

 

  • 부모 클래스 객체 생성의 인터페이스만 제공
  • 어떤 객체를 만들지는 자식 클래스가 결정 (오버라이딩)
  • 클라이언트는 객체 생성 방식에 대해 몰라도 됨
  • → 부모 타입으로만 사용하면 됨
  • 객체 생성을 직접 하지 않기 때문에 결합도 낮고, 확장에 유리

 

 

으어어어 이제 자야겠습니다..

오늘도 고생하셨습니다!