Skip to content

Digging-Deep-Study/digging-deep-design-patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

헤드퍼스트 디자인패턴

이 스터디는 헤드퍼스트 디자인패턴 책을 참고하여 진행한 스터디입니다.

image

  • ⏰ 스터디 일시: 격주 일요일 10시-12시 오프라인으로 진행 (온라인 병행)
  • 🏫 스터디 장소: 별일 없으면 부평 ^_^
  • 📚 스터디 자료:

스터디 방식

  • 각자 공부해온 내용을 바탕으로 오프라인에서 스터디 진행
  • 1시간동안 배운 내용을 발표하고, 남은 1시간동안 질문하는 형태로 진행
  • 매주 1챕터씩 진행, (2주마다 오프라인 진행)
  • 이전 모임에서 다음 챕터에 시나리오를 오프라인에서 정한다.
  • 시나리오(챕터별 2개)를 정해놓고 배운 디자인패턴을 적용하는 실습 진행
  • 오프라인에서는 책정리해온 내용 1명 발표 + 과제(실습) 시나리오들 리뷰

📝 내용 정리

  • 해당 저장소에 각자 공부한 내용을 작성하고 공유
  • 모두가 작성!

🖥️ 발표하기

  • 1명을 선정해서 스터디 당일 발표!
  • 스터디 하루 전날 저녁에 랜덤으로 선정합니다.

🙋‍♂️ 질문하기

  • 모르는 것을 서로 질문
  • 준비된 질문을 해도 된다!

👥 진행 일정

회차 날짜 챕터 상세 진행
1 04/27(일), 오전 10시 - -
2 05/11(일), 오전 10시 전략패턴 -
옵저버패턴 -
3 05/24(일), 오전 10시 데코레이터패턴 -
팩토리패턴 -
4 06/08(일), 오전 10시 싱글턴패턴 -
커맨드패턴 -
5 06/22(일), 오전 10시 어댑터패턴 -
퍼사드패턴 -
템플릿메서드패턴 -
6 07/06(일), 오전 10시 반복자패턴 -
컴포지트패턴 -
상태패턴 -

🗯️ 시나리오

전략 패턴 시나리오

  • 시나리오 1: 전자상거래 결제 수단
    • 컨텍스트: 글로벌 쇼핑몰에서 결제 수단을 신용카드, 페이팔, 계좌이체 등으로 확장
  • 시나리오 2: 이미지 압축 알고리즘
    • 컨텍스트: 웹 서비스에서 업로드 이미지 형식(JPEG, PNG, GIF)에 따라 압축 방식 선택

옵저버 패턴 시나리오

  • 시나리오 1: 재고 수량 변경 알림
    • 컨텍스트: 인기 상품 품절 직전에 고객과 물류팀에 자동 알림 전송
  • 시나리오 2: 시스템 로그 모니터링
    • 컨텍스트: 애플리케이션 이벤트(에러, 경고, 정보)를 여러 로그 저장소에 동시 기록

데코레이터 패턴 시나리오

  • 시나리오 1: 커피 주문 시스템
    • 컨텍스트: 기본 커피(에스프레소, 아메리카노 등)에 고객이 원하는 우유, 시럽, 휘핑크림 등의 옵션을 런타임에 조합하여 가격 계산
  • 시나리오 2: 웹 요청 핸들링 체인
    • 컨텍스트: 웹 애플리케이션에서 요청을 처리하는 기본 핸들러에 로깅, 인증, 캐싱 기능을 필요에 따라 동적으로 조합하여 부가 기능 적용

팩토리 메서드 패턴 시나리오

  • 시나리오 1: 문서 편집기 애플리케이션
    • 컨텍스트: 사용자가 선택한 문서 유형(Word, PDF, HTML 등)에 따라 해당 문서 객체를 생성하고 편집 기능 제공
  • 시나리오 2: 게임 아이템 생성기
    • 컨텍스트: 무기, 방어구, 소비 아이템 등 다양한 타입의 게임 아이템을 생성하는 상황에서 생성 로직을 하위 클래스에 위임하여 유연한 확장성 확보

추상 팩토리 패턴 시나리오

  • 시나리오 1: 크로스 플랫폼 GUI 툴킷
    • 컨텍스트: 운영체제(Windows, macOS, Linux)에 따라 서로 다른 스타일의 버튼, 체크박스, 메뉴를 하나의 인터페이스로 생성
  • 시나리오 2: 자동차 부품 생산 시스템
    • 컨텍스트: 승용차와 트럭처럼 서로 다른 차량군에 맞는 엔진, 차체, 휠 등 부품군을 팩토리에서 일괄 제공하여 제품군 일관성 유지

싱글턴 패턴 시나리오

  • 시나리오 1: 애플리케이션 설정 관리
    • 컨텍스트: 전체 애플리케이션에서 읽기 전용 설정(환경 변수, 프로퍼티 파일)을 중앙에서 로드·제공
  • 시나리오 2: DB 커넥션 풀 매니저
    • 컨텍스트: 하나의 커넥션 풀 인스턴스를 전역에서 참조해 데이터베이스 연결 관리

커맨드 패턴 시나리오

  • 시나리오 1: 텍스트 에디터 작업 취소/재실행
    • 컨텍스트: CutCommand, PasteCommand 등을 구현하고 커맨드 히스토리를 통해 Undo/Redo 기능 제공
  • 시나리오 2: 원격 제어 장치
    • 컨텍스트: 리모컨 버튼마다 TurnOnLightCommand, SetTemperatureCommand 객체로 캡슐화해 실행 요청 처리

어댑터 패턴 시나리오

  • 시나리오 1: 외부 결제 시스템 통합
    • 컨텍스트: 기존 내부 결제 시스템과 외부 결제 게이트웨이(토스페이먼츠, 아임포트)를 연결하여 다양한 결제 수단 지원
  • 시나리오 2: 다양한 데이터베이스 연결
    • 컨텍스트: MySQL, PostgreSQL, MongoDB 등 다양한 데이터베이스 시스템을 동일한 인터페이스로 사용할 수 있는 어댑터 구현

퍼사드 패턴 시나리오

  • 시나리오 1: 온라인 쇼핑몰 주문 처리 시스템
    • 컨텍스트: 주문 생성, 재고 확인, 결제 처리, 배송 준비 등 복잡한 주문 프로세스를 단순화된 인터페이스로 제공
  • 시나리오 2: 멀티미디어 플레이어
    • 컨텍스트: 오디오, 비디오, 자막 등 다양한 미디어 형식을 처리하는 복잡한 시스템을 단순화된 인터페이스로 제공

템플릿 메서드 패턴 시나리오

  • 시나리오 1: 문서 생성 시스템
    • 컨텍스트: PDF, HTML, Markdown 등 다양한 형식의 문서 생성을 위한 템플릿 메서드 구현
  • 시나리오 2: 게임 캐릭터 생성 시스템
    • 컨텍스트: 다양한 직업(전사, 마법사, 궁수 등)의 캐릭터 생성 프로세스를 템플릿화하여 구현

반복자(Iterator) 패턴

  • 시나리오 1: 뉴스 기사 피드
    • 컨텍스트: 다양한 뉴스 카테고리(정치, 스포츠, IT 등)가 있고, 각각 여러 기사를 가질 수 있을 때 사용자 인터페이스에서 각 카테고리의 기사를 순차적으로 불러오고 출력
  • 시나리오 2: 게임 인벤토리 탐색
    • 컨텍스트: 장비, 소모품, 퀘스트 아이템이 혼합된 플레이어 인벤토리에서 반복자를 이용해 특정 타입(예: 장비)만 순회하면서 정보를 보여줌

컴포지트(Composite) 패턴

  • 시나리오 1: 파일 시스템
    • 컨텍스트: File과 Folder 객체가 존재하며, Folder는 다른 File 또는 Folder를 포함하는 파일 시스템
  • 시나리오 2: UI 구성 요소
    • 컨텍스트: 버튼, 텍스트박스, 패널 등의 요소가 존재하고, Panel은 다른 UI 요소(또는 패널)를 포함할 수 있음. 렌더링 시 Panel.render() 호출로 내부 요소를 모두 렌더링하는 UI 시스템

상태(State) 패턴

  • 시나리오 1: 음악 재생기 상태 관리
    • 컨텍스트: 재생 중, 일시 정지, 정지 등의 상태가 존재하는 음악 재생기
  • 시나리오 2: TCP 연결 상태 관리
    • 컨텍스트: 수신받은 이벤트에 따라 Closed, Listening, Established, Fin-Wait 등의 상태 전이

🏃‍♂️ 스터디원

정철희 양성빈 김찬우 최현식
이은지 신예림 김도훈
공석

About

헤드퍼스트 디자인패턴

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 7