본문 바로가기

JAVA

(24)
[Design Pattern] Interpreter(인터프리터) 패턴이란? 행위 패턴(Behavioral Pattern) 인터프리터 패턴(Interpreter Pattern)은 객체지향 디자인 패턴 중 하나로, 언어나 문법을 해석하고 실행하는 역할을 담당하는 패턴입니다. 인터프리터 패턴은 문법 규칙을 나타내는 클래스를 정의하고, 이를 해석하여 실행할 수 있는 클래스를 만들어 구성합니다. 이때 해석하는 작업은 주로 문장의 구조를 분석하고 각 구성 요소를 적절한 동작으로 변환하는 것입니다. 예를 들어, 자연어로 작성된 수학 수식을 계산하는 프로그램을 만들기 위해서는 문법 규칙을 정의하고, 이를 해석하여 수식을 계산하는 클래스를 구현해야 합니다. 이때 문법 규칙은 수식에 대한 문법적인 구조를 나타내는 클래스를 만들어 정의하고, 해석 작업은 각 구성 요소를 분석하여 적절한 계산 작업을..
[Design Pattern] Command(커맨드) 패턴이란? 행위 패턴(Behavioral Pattern) 커맨드 패턴(Command Pattern)은 객체 지향 디자인 패턴 중 하나로, 요청을 객체의 형태로 캡슐화하여 나중에 실행하거나 취소할 수 있는 연산을 지원합니다. 이 패턴에서는 요청을 발신하는 객체와 요청을 수행하는 객체 사이에 인터페이스를 정의하고, 이를 통해 서로를 분리합니다. 이를 통해 요청을 실행하는 객체는 어떤 요청이 언제 수행되어야 하는지 알 필요 없이 요청을 수행할 수 있습니다. 커맨드 패턴은 다음과 같은 요소로 이루어져 있습니다. 커맨드(Command): 요청을 나타내는 객체입니다. 보통 execute()라는 메서드를 갖고 있으며, 이 메서드를 호출하면 요청이 수행됩니다. 컨크리트 커맨드(Concrete Command): 커맨드의 구체적인 ..
[Design Pattern] Chain of Responsibility(책임 연쇄) 패턴이란? 행위 패턴(Behavioral Pattern) 책임 연쇄 패턴(Chain of Responsibility)은 객체들이 연결된 체인 형태로 존재하며, 각 객체가 요청을 처리하지 못할 경우 다음 객체에게 책임을 전달하고, 다음 객체 또한 처리하지 못하면 다시 다음 객체로 전달하는 패턴입니다. 이 패턴은 객체 간의 결합도를 낮추고, 요청을 처리할 객체를 동적으로 결정하는 데 유용합니다. 요청 처리 과정에서 요청을 처리할 객체를 직접 지정하지 않아도 되므로, 클라이언트 코드와 서버 코드 간의 결합도가 낮아집니다. 이 패턴의 구성요소로는 요청(Request) 객체, 처리자(Handler) 인터페이스, 처리자 구현체, 그리고 체인 연결 방법이 있습니다. 요청 객체는 처리를 요청하는 객체를 나타내며, 처리자 인터페이..
[Design Pattern] Prototype(프로토타입) 패턴이란? 생성 패턴(Creational Pattern) 프로토타입 패턴(Prototype Pattern)은 객체를 생성할 때, 기존 객체의 복사를 통해 새로운 객체를 생성하는 디자인 패턴 중 하나입니다. 이는 객체 생성을 위한 복잡한 과정을 간소화하고, 또한 유사한 객체를 생성할 때 객체 생성 시간과 비용을 줄일 수 있는 장점이 있습니다. 프로토타입 패턴을 사용하면, 객체 생성 과정에서 복잡한 로직이 필요한 경우, 이미 생성된 객체를 복제(clone)하여 새로운 객체를 생성합니다. 이 때 복제를 통해 생성된 객체를 프로토타입 객체(Prototype)라고 합니다. 프로토타입 패턴을 구현할 때는, 복제를 위해 자바에서 제공하는 Cloneable 인터페이스를 구현하고, clone() 메서드를 오버라이드하여 구현합니다...
[Design Pattern] Proxy(프록시) 패턴이란? 구조 패턴(Structural Pattern) 프록시 패턴(Proxy Pattern)은 객체지향 디자인 패턴 중 하나로, 객체에 대한 접근을 제어하기 위해 사용됩니다. 객체에 대한 직접적인 접근 대신 프록시 객체를 통해 간접적으로 접근함으로써 객체의 동작을 제어하거나 객체에 대한 추가적인 작업을 수행할 수 있습니다. 프록시는 실제 객체와 같은 인터페이스를 제공하며, 실제 객체의 대리인 역할을 합니다. 프록시 객체는 실제 객체와 동일한 인터페이스를 구현하며, 클라이언트 코드가 프록시를 호출하면 프록시는 실제 객체를 호출하거나 호출하지 않을 수 있습니다. 이를 통해 실제 객체에 대한 접근을 제어할 수 있습니다. 프록시 패턴은 다양한 상황에서 사용됩니다. 예를 들어, 다음과 같은 경우에 프록시 패턴을 사용할 ..
[Design Pattern] Flyweight(플라이웨이트) 패턴이란? 구조 패턴(Structural Pattern) Flyweight 패턴은 객체 지향 디자인 패턴 중 하나로, 메모리 사용량을 줄이고 성능을 개선하기 위해 사용하는 패턴입니다. 이 패턴은 많은 수의 비슷한 객체를 생성하는 경우에 유용합니다. 예를 들어, 게임에서 많은 수의 적 캐릭터가 있을 때, 모든 캐릭터가 동일한 이미지를 사용하는 경우가 있습니다. 이때 Flyweight 패턴을 사용하면 메모리 사용량을 줄이고 성능을 개선할 수 있습니다. Flyweight 패턴은 객체를 두 가지 종류로 분류합니다. 첫 번째 종류는 Intrinsic(본질적) 객체이며, 이 객체는 공유될 수 있습니다. Intrinsic 객체는 외부에서 변경할 수 없는 고정된 상태를 가지고 있으며, 객체를 공유하는 것이 가능합니다. 두 번째 ..
[Design Pattern] Facade(퍼사드) 패턴이란? 구조 패턴(Structural Pattern) 퍼사드(Facade) 패턴은 소프트웨어 디자인 패턴 중 하나로, 복잡한 시스템이나 서브시스템의 인터페이스에 대한 간략한 인터페이스를 제공하여, 시스템의 복잡성을 감소시키는 패턴입니다. 퍼사드 패턴은 시스템 내의 다양한 구성 요소를 캡슐화하는데 사용됩니다. 이 패턴을 사용하면 클라이언트가 시스템의 내부 작업을 직접 다루지 않고, 대신 간단한 인터페이스를 사용하여 시스템과 상호작용할 수 있습니다. 퍼사드 패턴의 핵심 요소는 "퍼사드" 클래스입니다. 이 클래스는 시스템의 복잡한 부분을 캡슐화하고, 간단한 인터페이스를 제공하는 역할을 합니다. 클라이언트는 이 인터페이스를 사용하여 시스템의 서브시스템과 상호작용합니다. 퍼사드 패턴을 사용하면 시스템이 단순화되고 유지보..
[Design Pattern] Decorator(데코레이터) 패턴이란? 구조 패턴(Structural Pattern) 데코레이터 패턴은 객체 지향 디자인 패턴 중 하나로, 기존 객체에 새로운 기능을 추가하거나 객체의 행동을 수정하지 않고, 객체의 기능을 동적으로 확장하는 방법을 제공합니다. 이 패턴은 객체의 기능을 각각의 작은 단위로 분리하고, 이 단위들을 조합해서 새로운 기능을 만들어내는 방법을 사용합니다. 이렇게 분리된 각각의 단위를 데코레이터(Decorator)라고 부릅니다. 데코레이터 패턴에서는 데코레이터가 기존 객체와 동일한 인터페이스를 가지며, 데코레이터는 기존 객체를 래핑(Wrapper)합니다. 이 래핑된 객체는 기존 객체의 기능을 그대로 수행하면서, 새로운 기능을 추가하거나 변경할 수 있습니다. 이렇게 데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있으며..

반응형