Afaik

7월 26일

오늘 배운 것 (TIL)

디자인 패턴 기초와 생성 패턴

핵심 요약 (TL;DR)

SOLID 원칙을 기반으로 객체 생성의 책임을 분리하고 유연성을 높이는 방법을 학습.

SOLID 원칙 정리

SRP (Single Responsibility Principle) - 단일 책임 원칙

  • 핵심: 한 객체는 하나의 책임만 가져야 한다
  • 책임 = 변경의 이유
  • 실무에서는 객체가 너무 많아져서 지키지 않는 경우도 있음

OCP (Open Closed Principle) - 개방 폐쇄 원칙

  • 핵심: 확장에는 열려있고, 변경에는 닫혀있어야 한다
  • 새로운 기능 추가 시 기존 코드 수정 금지

LSP (Liskov Substitution Principle) - 리스코프 치환 원칙

  • 핵심: 자식 클래스는 부모 클래스 역할을 대체할 수 있어야 한다
  • 확인법: 부모 클래스 자리에 자식 클래스를 넣어도 타입 에러가 나지 않아야 함

ISP (Interface Segregation Principle) - 인터페이스 분리 원칙

  • 핵심: 사용하지 않는 인터페이스는 구현하지 말아야 한다
  • 인터페이스를 쪼개서 필요한 만큼만 implements

DIP (Dependency Inversion Principle) - 의존성 역전 원칙

  • 핵심: 추상성이 높은 클래스와 의존 관계를 맺는다
  • 상속 대신 합성, interface/abstract class를 매개변수로 사용

생성 패턴 (Creational Patterns)

1. 싱글턴 (Singleton)

목적: 하나의 인스턴스만 존재함을 보장

특징:

  • 생성자를 private으로 (JS에서는 symbol 사용)
  • 문제점: SRP 위반, 강결합으로 테스트 어려움

2. 심플 팩토리 (Simple Factory)

목적: 객체를 반환하는 함수

특징:

  • 조건문에 따라 다른 객체 반환
  • 문제점: SRP, OCP 위반

3. 팩토리 메서드 (Factory Method)

목적: 상위 클래스가 인터페이스 역할, 하위 클래스에서 구체적 구현

장점:

  • 하위 클래스를 다양하게 만들어 OCP, SRP 충족
  • 상속을 통해 다른 객체 생성 가능

구조:

Creator (상위)
├── ConcreteCreatorA
└── ConcreteCreatorB

4. 추상 팩토리 (Abstract Factory)

목적: 여러 팩토리의 그룹

핵심 아이디어:

  • 팩토리 메서드 패턴에서 확장
  • 일관성 보장: Chrome 메뉴에 IE 히스토리가 생기는 등의 상황 방지
  • 브라우저별로 그림판, 메뉴, 히스토리의 세트가 함께 생성됨

패턴별 SOLID 원칙 적용도

패턴SRPOCP비고
싱글턴-인스턴스 관리 + 비즈니스 로직
심플 팩토리조건문으로 모든 객체 생성
팩토리 메서드하위 클래스로 확장
추상 팩토리팩토리 메서드 패턴 확장

실무 적용 포인트

  1. 싱글턴: 남용 금지, 정말 필요한 경우만
  2. 팩토리 메서드: 객체 생성이 복잡하고 확장 가능성이 있을 때
  3. 추상 팩토리: 관련된 객체들을 일관성 있게 생성해야 할 때

다음 학습 목표

  • 행동 패턴 (Behavioral Patterns) 학습
  • 구조 패턴 (Structural Patterns) 학습
  • Canvas 프로젝트에 패턴 적용해보기

참고 자료

  • ZeroCho 디자인 패턴
Edit on GitHub

Last updated on