Design Pattern 27

[디자인 패턴] 빌더 패턴 (Builder Pattern)

빌더 패턴동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법복잡한 객체의 생성 과정과 표현 방식을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 지원특히 생성해야 하는 객체가 복잡하고, 생성 과정이 여러 단계로 나누어져 있을 때 유용복잡한 객체를 만드는 프로세스를 독립적으로 분리할 수 있음  주요 구성 요소 1. Builder 인터페이스객체 생성을 위한 추상 메서드 정의인스턴스를 생성하는 방법들을 단계 별로 만들 수 있도록 메서드 제공 (위 UML에서 buildXXX 메서드들)최종 Product를 받아올 수 있는 메서드 제공 (위 UML에서 getResult 메서드) 2. Concrete BuilderBuilder 인터페이스 구현체특정한 타입의 복잡한 객체 생성을 위한 구체..

Design Pattern 2024.06.21

[디자인 패턴] 추상 팩토리 패턴 (Abstract Factory Pattern)

추상 팩토리 패턴구체적인 클래스의 인스턴스를 생성하는 방법을 캡슐화하여 일관된 방식으로 연관된 객체를 생성할 수 있게 지원하는 패턴Concrete Factory에서 Concrete Instance를 만들어주는 것까지는 팩토리 메서드 패턴과 비슷하지만초점이 팩토리를 사용하는 클라이언트 쪽에 있음목적 자체가 팩토리에서 인스턴스를 만드는 코드를 인터페이스 기반으로 구현할 수 있게끔 지원해 주는 패턴구체적인 클래스에 의존하지 않고 객체를 생성할 수 있기 때문에 클라이언트 코드를 변경하지 않아도 됨  부연 설명팩토리 메서드 패턴에서 Client만 추가되었다고 생각해도 무방 추상 팩토리 패턴 구현 예시앞서 설명했다시피 추상 팩토리 메서드 패턴과 유사하지만 초점이 클라이언트에서 팩토리를 사용하는 방법에 있음 1. F..

Design Pattern 2024.06.18

[디자인 패턴] 팩토리 메서드 패턴 (Factory Method Pattern)

팩토리 메서드 패턴어떤 인스턴스를 생성하는 책임을 구체적인 클래스가 아니라 추상적인 인터페이스의 메서드로 감싸는 패턴추상화하지 않을 경우 객체지향 SOLID 원칙의 OCP 원칙에 어긋나 변경에 닫혀있지 않음어떤 인스턴스를 생성하는 책임을 구체적인 클래스(Concrete Class)가 가져가면 구체적인 클래스가 늘어날 때마다 기존 코드 변경이 불가피한 구조정리하자면 객체 생성의 책임을 서브클래스에게 위임하여, 객체 생성을 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지는 서브클래스가 결정하게 하는 디자인 패턴  부연 설명팩토리 역할을 할 인터페이스를 생성하여 구현부 중 일부 변경이 필요한 메서드를 추상 메서드로 선언하고 하위 클래스(Concrete Class)에서 해당 메서드를 구현Facto..

Design Pattern 2024.06.18

[디자인 패턴] 싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴두 가지 목적을 가진 패턴인스턴스를 오직 한 개만 생성만들어진 하나의 인스턴스에 글로벌하게 접근할 수 있는 방법을 제공  싱글톤 패턴 구현 방법싱글톤 패턴은 여러 가지 방법으로 구현 가능하며 각각의 특징에 대해 간략하게 설명해 보겠습니다. 1. 싱글톤 패턴 구현 방법 #1동기화를 사용해 멀티쓰레드 환경에서 안전하게 만드는 방법   부연 설명클래스 외부에서 생성자를 호출할 수 없도록 private 생성자를 선언하여 새로운 인스턴스 생성 불가능하도록 처리싱글톤 패턴 목적에 맞게 클래스 내에서 인스턴스를 만들고 글로벌하게 접근할 수 있도록 처리해야 함글로벌하게 접근할 수 있어야 하므로 정적(static) 메서드로 선언멀티 쓰레드 환경에서도 thread-safe 하도록 synchronized 키워드를..

Design Pattern 2024.06.13

[디자인 패턴] JDK 동적 프록시와 CGLIB

개요기존에 정리한 프록시 패턴(https://jaimemin.tistory.com/2016)을 통해 기존 코드를 변경하지 않고 부가적인 기능을 추가할 수 있는 장점이 있었지만 비슷한 구조를 갖는 프록시 클래스를 계속 생성해야 하는 단점이 있었습니다.클래스를 계속 생성하면 관리 포인트가 늘어난다는 것이 단점인데 이는 자바에서 제공하는 JDK 동적 프록시 기술과 CGLIB와 같은 프록시 생성 오픈소스 기술을 통해 해결 가능합니다.따라서, 이번 게시글에서는 JDK 동적 프록시 기술과 CGLIB를 소개할 것이며 추가적으로 프록시 기술을 이해하기 위해 알아야 하는 리플렉션 기술 또한 정리해볼 것입니다. 1. 리플렉션리플렉션 기술을 보다 쉽게 이해하기 위해 우선 예제 코드부터 작성해보겠습니다. 리플렉션 적용 전 예..

Design Pattern 2021.12.11

[디자인 패턴] 프록시 패턴과 데코레이터 패턴

개요이번 게시글에서는 템플릿 메서드 패턴 및 콜백 패턴(https://jaimemin.tistory.com/2014)에 이어 프록시 패턴과 데코레이터 패턴에 대해 간단히 정리해보겠습니다.우선, 간단하게 프록시가 무엇인지 설명하고 이어서 프록시 패턴과 데코레이터 페턴에 대해 설명해보겠습니다. 1.  프록시기본적으로 클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요청을 처리합니다.예를 들어, 컴퓨터 네트워크에서는 웹 브라우저가 서버에 요청을 하고 서버는 클라이언트에서 받은 요청을 처리합니다.해당 개념을 객체에도 도입시킬 수 있는데 이때 요청하는 객체는 클라이언트가 되고, 요청을 처리하는 객체는 서버가 됩니다.클라이언트 요청을 서버에 직접 할 수도 있지만 대리자를 통해서 대신 간접적으로 서버에..

Design Pattern 2021.12.01

[디자인 패턴] 템플릿 메서드 패턴과 콜백 패턴

개요강의에서 설명해주시는 좋은 설계란 SOLID 원칙 중 단일 책임 원칙(SRP)을 철저히 따라 최소한의 코드 변경을 통해 로직을 변경할 수 있는 구조라고 하셨습니다.즉, 변경 지점을 한 곳에 모아 변경에 쉽게 대처할 수 있는 구조를 만드는 것이 핵심인데 이를 달성하기 위해 이번 게시글에서는 템플릿 메서드 패턴과 콜백 패턴에 대해 간단히 알아보겠습니다. 1. 템플릿 메서드 패턴GOF(Gang Of Four) 디자인 패턴에 의하자면 템플릿 메서드의 정의는 아래와 같습니다."작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기하는 것이 목적입니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다." 여기서 핵심은 재사용을 위..

Design Pattern 2021.11.25