Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 인프런워밍업클럽
- 스터디2기
- Pager
- 티스토리챌린지
- 동적 프로그래밍 방법
- 욕심쟁이 방법
- zsh
- 데이크스트라
- table status
- 오일러 경로
- 알고리즘
- cs
- 순차탐색
- 이진탐색
- 오블완
- oh-my-zsh
- zsh theme
- Less
- VI
- 인프런
- 분할정복 방법
- 네트워킹데이
- spring boot
- mycli
- CS스터디
- mysql 표
- mysql 표 출력
- MySQL
- 터미널
- 맥
Archives
- Today
- Total
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가지 패턴
왜 패턴을 배워야 할까?
- 디자인 패턴은 소프트웨어 디자인의 일반적인 문제들에 대해 시도되고 검증된 해결책을 모은것으로,
배워두면 객체지향 디자인의 원칙을 사용해 많은 종류의 문제를 해결하는 방법을 배울 수 있음 - 팀원과 효율적으로 의사소통할 수 있음
패턴의 분류
- 복잡성, 상세도 및 설계 대상 범위에 따른 분류 (POSA 시리즈, Pattern-Oriented Software Architecture)
- idioms : 하위 설계 패턴 (가장 기본적임)
- 단일 프로그래밍 언어에만 적용 가능
- architectural patterns : 상위 설계 패턴 (가장 보편적임)
- 거의 모든 언어로 아키텍처 패턴 구현 가능
- 다른 패턴들과 달리, 애플리케이션 전체의 구조(아키텍처) 를 설계하는 데 사용 가능
- idioms : 하위 설계 패턴 (가장 기본적임)
- 의도(목적)에 따른 분류 (GoF 패턴 분류)
- 생성 패턴 (Creational patterns)
: 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘(캡슐화)들을 제공 - 구조 패턴 (Structural patterns )
: 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명 - 행동 패턴 (Behavioral patterns)
: 객체간 효과적인 의사소통과 책임할당을 처리
- 생성 패턴 (Creational 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) 패턴
- 부모 클래스는 객체 생성의 인터페이스만 제공
- 어떤 객체를 만들지는 자식 클래스가 결정 (오버라이딩)
- 클라이언트는 객체 생성 방식에 대해 몰라도 됨
- → 부모 타입으로만 사용하면 됨
- 객체 생성을 직접 하지 않기 때문에 결합도 낮고, 확장에 유리
으어어어 이제 자야겠습니다..
오늘도 고생하셨습니다!
'백엔드 > KDT_Programmers' 카테고리의 다른 글
| 28일차_Spring MVC(동작원리, 처리흐름), Logback, Lombok (0) | 2025.04.11 |
|---|---|
| 27일차_Spring-core(Scope, Bean, DI, AOP), Spring-mvc(Context) (0) | 2025.04.09 |
| 25일차_Servlet, JSP(EL, JSTL) (0) | 2025.04.09 |
| 24일차_speech.js로 미니프로젝트 음성인식 구현 및 github를 통한 정적배포 (0) | 2025.04.09 |
| 23일차_Front(JS-Fetch, DOM, API 연동 및 config.js 설정) (0) | 2025.04.04 |