728x90

Design Pattern with Java 9

8. 플라이웨이트 (Flyweight 패턴) - 메모리 최적화 디자인 패턴

목차1. Flyweight 패턴이란?Flyweight 패턴은 객체 지향 디자인 패턴 중 하나로, 메모리 절약과 성능 최적화를 위해 사용됩니다. 주로 동일한 데이터를 여러 객체에서 공유하여, 객체를 많이 생성해야 할 때 메모리 사용을 최소화하고 성능을 향상시키는 데 유용합니다.이 패턴의 핵심 아이디어는 공유 가능한 객체를 이용하여 메모리를 절약하는 것입니다. Flyweight 패턴은 여러 객체가 공통된 속성을 공유하도록 하여, 메모리 사용량을 줄이고 성능을 최적화합니다.2. Flyweight 패턴의 구조Flyweight 패턴은 주로 다음과 같은 구조로 이루어집니다:Flyweight Interface: 공유할 수 있는 객체가 구현해야 하는 인터페이스입니다. 객체 간에 외부 상태를 전달받아 처리하는 메서드들을..

7. 데코레이터 패턴 (Decorator Pattern)

목차1. 데코레이터 패턴이란?데코레이터 패턴(Decorator Pattern)은 객체에 동적으로 추가적인 기능을 부여할 수 있는 디자인 패턴입니다. 기본적으로, 데코레이터 패턴은 기존 클래스에 기능을 추가하고 싶을 때 사용됩니다. 이는 상속 대신 구성(Composition)을 사용하여 동적으로 기능을 확장할 수 있게 해줍니다.데코레이터 패턴 사용 이유:객체의 기능을 동적으로 추가할 수 있습니다.상속을 사용하지 않고 기존 코드 수정 없이 기능 확장이 가능합니다.여러 기능을 조합하여 사용할 수 있습니다.2. 데코레이터 패턴의 특징기존 클래스를 변경하지 않고 기능을 추가할 수 있습니다.데코레이터 클래스는 Coffee 객체를 포함하여 추가 기능을 구현합니다.여러 데코레이터를 체인처럼 연결하여 기능을 확장할 수 ..

6. 전략 패턴(Strategy Pattern)

목차전략 패턴(Strategy Pattern)란?전략 패턴(Strategy Pattern)은 행동 디자인 패턴 중 하나로, 알고리즘을 클래스로 캡슐화하여, 클라이언트에서 실행 시 적절한 알고리즘을 동적으로 변경할 수 있도록 돕는 패턴입니다. 즉, 어떤 작업을 수행하는 방법을 전략(Strategy)으로 분리하여, 이를 필요에 따라 유연하게 교체할 수 있도록 만드는 구조입니다.전략 패턴의 특징알고리즘을 클래스로 캡슐화하여, 알고리즘을 실행하는 클래스를 변경하지 않고, 전략을 바꿀 수 있습니다.알고리즘을 독립적으로 변경할 수 있어 유연성과 확장성을 제공합니다.여러 알고리즘을 인터페이스나 추상 클래스를 통해 정의하고, 이를 구체적인 전략 클래스에서 구현합니다.클라이언트는 실행 시점에서 알고리즘을 선택하고 적용할..

5. 템플릿메소드 패턴(Template Method)

목차템플릿 메소드 패턴(Template Method Pattern)란?템플릿 메소드 패턴(Template Method Pattern)은 행동 디자인 패턴 중 하나로, 알고리즘의 구조를 정의하고, 알고리즘의 일부 단계를 서브클래스가 구현하도록 맡기는 패턴입니다. 이 패턴은 알고리즘의 흐름을 상위 클래스에서 정의하고, 세부 구현을 하위 클래스에서 정의하는 방식으로 설계됩니다.템플릿 메소드 패턴의 특징알고리즘의 구조를 상위 클래스에서 정의하고, 일부 세부 구현은 하위 클래스에서 구현하게 됩니다.알고리즘을 구현할 때, 공통된 부분을 상위 클래스에서 처리하고, 변경되는 부분만 하위 클래스에서 처리하는 방식입니다.서브클래스에서 알고리즘의 세부 구현을 수정할 수 있으므로 유연하게 확장이 가능합니다.템플릿 메소드 패턴..

4. Builder 패턴(from effective-java)

1. 기본 구조: Pizza 클래스Java에서는 객체 생성과 관련된 복잡한 요구 사항을 처리할 때 빌더 패턴(Builder Pattern)을 자주 사용합니다. 특히 Effective Java에서는 객체 생성 시 인자가 많거나 선택적인 경우 빌더 패턴을 통해 객체를 명확하고 안전하게 생성할 수 있다고 강조합니다. 오늘은 Pizza 클래스를 예시로 하여 빌더 패턴을 어떻게 구현하는지 분석하고, 이를 어떻게 적용할 수 있는지에 대해 알아보겠습니다. 먼저, Pizza 클래스가 어떤 구조로 설계되어 있는지 살펴봅시다.public abstract class Pizza { public enum Topping { HAM, MUSHROOM, ONION, PEPPER, SAUSAGE }; final Set to..

4. builder 패턴(gof)

gof builder 패턴 코드에 대한 분석을 바탕으로 Builder 패턴에 대해서 알아보기로 했습니다. MakeReport는 Java 인터페이스로, 보고서를 생성하는 기본 구조를 정의합니다. 이 인터페이스는 Header, Body, Footer 세 가지 주요 요소를 생성하는 메서드와 최종적으로 보고서를 반환하는 메서드를 포함하고 있습니다. 이러한 설계는 확장성과 유연성을 고려한 객체지향 프로그래밍(OOP)의 인터페이스 기반 설계 원칙을 잘 보여줍니다.코드 분석package gof;public interface MakeReport { public void MakeHeader(); public void MakeBody(); public void MakeFooter(); public S..

3.추상 팩토리 패턴(Abstract Factory Pattern)

추상 팩토리 패턴(Abstract Factory Pattern)은 관련 객체들의 군(군집)을 생성하는 데 사용되는 생성 패턴 중 하나입니다. 이 패턴은 상위 레벨에서 구체적인 클래스에 의존하지 않고, 관련 객체들을 그룹화하여 생성하는 인터페이스를 제공합니다.추상 팩토리 패턴의 특징객체 군의 생성: 관련된 객체들을 하나의 팩토리로 묶어 일관된 방식으로 생성합니다.구현체 독립성: 구체적인 클래스에 의존하지 않고 인터페이스 또는 추상 클래스를 통해 객체를 생성합니다.확장성: 새로운 제품군이 추가될 때 기존 코드에 영향을 최소화합니다.사용 시점서로 관련된 객체들이 같이 사용되어야 할 때.시스템이 구체적인 클래스에 의존하지 않고, 상위 수준의 인터페이스를 사용해야 할 때.객체를 생성하는 구체적인 코드와 클라이언트..

2.프로토타입 패턴(Prototype Pattern)

프로토타입 패턴(Prototype Pattern)은 객체를 직접 생성하는 대신, 기존 객체를 복제(clone) 하여 새로운 객체를 생성하는 디자인 패턴입니다. 이 패턴은 객체 생성 비용이 크거나, 생성 과정이 복잡할 때 유용합니다.프로토타입 패턴의 특징복제: 새로운 객체를 생성할 때 기존 객체를 복제하여 사용합니다.성능 향상: 객체 생성 비용을 줄이고, 복잡한 초기화 과정을 단순화합니다.유연성: 런타임에 객체를 복제하고 수정할 수 있어 동적인 객체 관리가 가능합니다.사용 시점객체 생성 비용이 클 때 (예: 데이터베이스 조회, 네트워크 호출 등).객체의 구조가 복잡하고 생성 로직을 단순화하려고 할 때.기존 객체를 재사용하면서 일부 속성만 변경하고 싶을 때.자바에서 프로토타입 패턴 구현하기자바에서 프로토타입..

1. 싱글톤 패턴(Singleton Pattern)

싱글톤 패턴(Singleton Pattern)은 객체를 하나만 생성하도록 보장하고, 전역적으로 접근할 수 있는 방법을 제공하는 디자인 패턴입니다. 이는 특정 클래스의 인스턴스가 하나만 존재해야 하는 경우에 유용합니다. 자바에서는 싱글톤 패턴이 널리 사용되며, 데이터베이스 연결, 설정 클래스, 로깅 등 다양한 곳에서 활용됩니다.싱글톤 패턴의 특징단일 인스턴스 보장: 클래스의 인스턴스가 하나만 생성됩니다.글로벌 접근: 어디서든 해당 인스턴스에 접근할 수 있습니다.메모리 절약: 불필요한 객체 생성을 방지하여 메모리를 절약할 수 있습니다.싱글톤 패턴 구현 방법자바에서 싱글톤 패턴을 구현하는 여러 가지 방법이 있습니다. 여기서는 대표적인 구현 방식을 다루겠습니다.1. Eager Initialization (즉시 ..

728x90