일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TDD
- 싱글톤 빈
- 항플
- pull model
- 항해 백엔드
- 피드 구현
- 순차지향
- 기능 테스트
- 항해+
- 데이터 쿼리
- 빈 스코프
- 항플 백엔드
- 항해플러스백엔드
- 항해플러스후기
- 프로토타입 빈
- 항플 후기
- fanout on write
- 항해
- 항해플러스 백엔드
- push model
- 항해플러스
- API Aggregation
- 항해 후기
- 항해 플러스 후기
- 항해플러스 후기
- fanout on read
- 디자인 패턴
- 생성 패턴
- OOP
- 항해플러스 회고
- Today
- Total
목록디자인 패턴 (9)
deVlog
목차 📇 개요프로토타입 패턴(Prototype Pattern)은 기존 객체를 복제하여 새로운 객체를 생성하는 생성 디자인 패턴이다. 즉, 원형이 되는 인스턴스를 사용해 새로운 인스턴스를 만드는 방식으로, 객체 생성 비용이 큰 경우에 효율적이다.⭐️ 특징기존 객체의 상태를 그대로 복사하여 새로운 객체를 생성한다.객체 생성 과정의 복잡성을 감춘다.객체 생성 비용이 큰 경우에 성능을 향상시킨다.프레임워크 확장 시 구체적인 클래스 정보 없이도 객체를 생성할 수 있다. 👩🏻💻 코드로 알아보자프로토타입 패턴을 구현하는 여러 방법을 살펴보자.1. Cloneable 인터페이스 구현// 1. Cloneable 인터페이스를 구현한 프로토타입 클래스public class Shape implements Clonea..
목차 📇 개요싱글톤 패턴(Singleton Pattern)은 클래스의 인스턴스가 오직 하나만 생성되고, 어디서든 그 인스턴스에 접근할 수 있도록 하는 생성 디자인 패턴이다. 즉, 전역 변수를 사용하지 않고도 객체를 하나만 생성하여 어디서든 접근할 수 있게 하는 패턴이다. ⭐️ 특징인스턴스가 오직 한 개만 존재하도록 보장한다.전역적인 접근점을 제공하여 어디서든 동일한 인스턴스에 접근할 수 있다.지연 초기화(lazy initialization)가 가능하여 필요한 시점에 인스턴스를 생성할 수 있다. 👩🏻💻 코드로 알아보자싱글톤 패턴의 다양한 구현 방법을 살펴보자.1. 기본 싱글톤 패턴public class BasicSingleton { // 1. private static 변수로 유일한 인스..
목차 📇 개요상태 패턴(State Pattern)은 객체의 내부 상태가 변경될 때 객체의 행동이 변경되도록 하는 행동 디자인 패턴이다. 즉, 객체의 상태에 따라 객체의 행동이 달라지게 하는 패턴으로, 마치 객체의 클래스가 변경되는 것처럼 보이게 한다. 특징상태 전환 로직을 캡슐화하여 코드의 가독성과 유지보수성을 높인다.상태별 동작을 별도의 클래스로 분리하여 단일 책임 원칙(SRP)을 준수한다.조건문(if-else, switch)을 제거하고 객체지향적인 방식으로 상태 전환을 처리한다. 👩🏻💻 코드로 알아보자자판기의 상태 변화를 구현하는 예제를 통해 상태 패턴을 살펴보자.// 1. 상태 인터페이스interface State { void insertCoin(VendingMachine vendin..
목차 📇 개요옵저버 패턴(Observer Pattern)은 객체의 상태 변화를 관찰하는 관찰자들(옵저버들)에게 자동으로 통지하는 디자인 패턴이다. 즉, 한 객체의 상태가 변하면 그 객체에 의존하는 다른 객체들에게 자동으로 알림이 가고 자신도 업데이트되는 1:N 의존성을 정의한다. 특징발행(Publish)-구독(Subscribe) 모델로도 알려져 있다.느슨한 결합(Loose Coupling) 구조를 만들어 객체 간 의존성을 최소화한다.분산 이벤트 핸들링 시스템을 구현하는 데 이상적이다. 👩🏻💻 코드로 알아보자날씨 정보를 수집하고 다양한 디스플레이에 업데이트하는 예제를 통해 옵저버 패턴을 살펴보자.// 1. 옵저버 인터페이스 (구독자)interface Observer { void update(..
목차 📇 개요커맨드 패턴(Command Pattern)은 요청을 객체로 캡슐화하여 매개변수화된 클라이언트를 만들고, 요청 내역을 큐에 저장하거나 로그로 기록할 수 있게 하는 행동 디자인 패턴이다. 즉, 실행될 기능을 캡슐화하여 호출자(Invoker)와 수신자(Receiver) 사이의 의존성을 제거하는 패턴이다. 특징명령(요청)을 객체로 표현하여 캡슐화한다.실행될 기능의 변경에도 호출자 코드를 수정할 필요가 없다.명령의 저장, 로깅, 취소 등 다양한 확장 기능을 구현할 수 있다. 👩🏻💻 코드로 알아보자리모컨으로 다양한 가전제품을 제어하는 예제를 통해 커맨드 패턴을 살펴보자.// 1. 커맨드 인터페이스interface Command { void execute(); void undo();}..
목차 📇 개요템플릿 메서드 패턴은 상위 클래스(추상 클래스)에서 알고리즘의 구조를 정의하고, 하위 클래스에서 세부 구현을 담당하는 디자인 패턴이다.즉, 알고리즘의 뼈대는 템플릿 메서드가 정의하고, 구체적인 동작은 하위 클래스가 오버라이딩하여 구현하는 방식이다. 특징알고리즘 구조를 재사용할 수 있다.일관된 실행 흐름을 보장하면서도 세부 구현을 변경할 수 있다.코드 중복을 줄이고 유지보수를 쉽게 만든다. 👩🏻💻 코드로 알아보자커피와 차를 만드는 과정을 템플릿 메서드 패턴으로 구현해보자// 1. 템플릿 메서드를 제공하는 추상 클래스abstract class Beverage { // 템플릿 메서드 (최종 실행 흐름을 정의) public final void prepareRecipe() { ..
목차 📇 개요복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 패턴이다.같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있다.생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성한다. 👩🏻💻 코드로 알아보자builders/Builder.java: 공통 빌더 인터페이스public interface Builder { void setCarType(CarType type); void setSeats(int seats); void setEngine(Engine engine); void setTransmission(Transmission transmission); void setTripComputer(TripCom..
목차 📇 개요관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴이다.서로 관련이 있는 객체들을 통째로 묶어서 추상화하고, 팩토리 객체에서 집합으로 묶은 객체 군을 생성한다.추상 팩토리 패턴의 핵심은 제품'군' 집합을 타입 별로 찍어낼 수 있다는 점이다.팩토리 메서드 패턴을 좀 더 캡슐화한 방식이다. 👩🏻💻 코드로 알아보자buttons: 첫 번째 제품의 계층구조public interface Button { void paint();}public class MacOSButton implements Button { @Override public void paint() { System.out.println("You have c..