728x90
반응형

디자인패턴 8

[java] 옵저버(Observer) 패턴

옵저버(Observer) 패턴 옵저버 패턴은 객체 사이의 일대다(one-to-many) 의존성 관계를 정의하는 디자인 패턴 중 하나로, 한 객체의 상태 변화가 다수의 객체에게 알려져 이들 객체가 자동으로 업데이트되도록 하는 패턴입니다. 이 패턴은 주로 느슨한 결합(loose coupling)을 통해 객체 간의 상호 작용을 유지하고 확장 가능한 시스템을 구축할 때 사용됩니다. 장점 느슨한 결합(Loose Coupling): 주체 객체와 옵저버 객체들 간의 상호 의존성을 최소화하며, 코드의 재사용성과 유지보수성을 향상시킵니다. 확장 가능성: 새로운 옵저버를 추가하거나 기존 옵저버를 제거하기 쉽습니다. 시스템을 확장하거나 수정할 때 유연성을 제공합니다. 이벤트 기반 시스템: 이벤트 처리와 관련된 시스템에서 유..

카테고리 없음 2024.01.12

[java] 컴포지트(Composite) 패턴

컴포지트 패턴은 객체들을 트리 구조로 구성하여 개별 객체와 복합 객체(객체들의 그룹)를 동일한 방법으로 다룰 수 있게 하는 구조적인 디자인 패턴입니다. 이 패턴은 객체들 간의 계층 구조를 표현하고, 클라이언트가 개별 객체와 복합 객체를 구분하지 않고 사용할 수 있도록 합니다. 장점 일관된 인터페이스: 개별 객체와 복합 객체를 동일한 방식으로 처리할 수 있어 코드를 단순화하고 일관성을 유지합니다. 계층 구조: 객체들 간의 계층 구조를 표현하여 복잡한 관계를 간단하게 모델링할 수 있습니다. 재귀적 구조: 복합 객체 내에 다른 복합 객체를 포함할 수 있어 계층 구조를 재귀적으로 표현할 수 있습니다. 클라이언트 코드 간소화: 클라이언트 코드가 개별 객체와 복합 객체를 구분하지 않고 동일한 인터페이스로 처리할 수..

개발/자바 2024.01.12

[java] 데코레이터(Decorator) 패턴

정의 데코레이터 패턴은 객체의 구조를 변경하지 않고도 객체에 동적으로 새로운 기능을 추가할 수 있는 구조적인 패턴입니다. 이 패턴은 객체의 확장을 위해 상속 대신 구성을 활용하며, 객체를 래핑하여 런타임 시에 새로운 기능을 추가하거나 수정할 수 있도록 합니다. 장점 개방-폐쇄 원칙(OCP, Open-Closed Principle)을 따릅니다. 기존 코드 수정 없이 새로운 기능을 추가할 수 있습니다. 단일 책임 원칙(SRP, Single Responsibility Principle)을 지킬 수 있습니다. 각 데코레이터 클래스는 자체적으로 한 가지 기능만 추가합니다. 객체 간의 결합도를 낮춥니다. 구성을 통해 필요한 데코레이터를 동적으로 추가하므로 객체 간의 의존성이 줄어듭니다. 단점 많은 데코레이터가 중첩..

개발/자바 2024.01.11

[java] 어댑터(Adapter) 패턴

정의: 어댑터 패턴은 호환되지 않는 인터페이스를 가진 두 클래스를 함께 동작할 수 있도록 하는 디자인 패턴입니다. 쉽게 말해, 기존의 클래스를 수정하지 않고 새로운 인터페이스에 맞게 변환해주는 역할을 하는 패턴입니다. 장점: 재사용성 증가: 기존 클래스를 변경하지 않고 새로운 클래스에 적응시킬 수 있으므로 기존 코드를 재사용할 수 있습니다. 유연성 향상: 호환되지 않는 인터페이스를 갖는 클래스를 함께 사용할 수 있어서 시스템의 유연성을 향상시킵니다. 연동성 증가: 기존의 클래스를 새로운 클래스와 연동할 수 있게 해주어 기존 시스템을 새로운 기능과 연동시킬 수 있습니다. 단점: 성능 저하 가능성: 어댑터가 추가되면 성능 저하가 발생할 수 있습니다. 복잡성 증가: 어댑터 패턴이 과도하게 사용되면 코드의 복잡..

개발/자바 2024.01.11

[java] 추상 팩토리(Abstract Factory) 패턴

추상 팩토리(Abstract Factory) 패턴 정의: 추상 팩토리 패턴은 서로 연관된, 또는 의존하는 객체들을 생성하기 위한 인터페이스를 제공하며, 각각의 구체적인 팩토리 클래스가 이를 구현하여 객체를 생성하는 디자인 패턴입니다. 이 패턴은 팩토리 메서드 패턴을 조합하여 여러 제품군을 생성하도록 설계되어 있습니다. 장점: 유연성과 확장성: 새로운 제품군을 도입하거나 기존 제품군을 확장하기가 용이합니다. 제품군 간의 일관성: 추상 팩토리는 연관된 제품들을 생성하므로, 이들이 함께 사용될 때 일관성을 유지할 수 있습니다. 클라이언트 코드 단순화: 클라이언트는 구체적인 클래스 이름을 알 필요 없이 팩토리를 통해 객체를 생성할 수 있습니다. 단점: 복잡성 증가: 새로운 제품이나 팩토리를 추가할 때마다 클래스..

개발/자바 2024.01.10

[자바] 팩토리 메서드(Factory Method) 패턴

정의: 팩토리 메서드 패턴은 객체 생성을 처리하는 인터페이스를 정의하되, 객체의 생성을 서브 클래스에게 위임하여 구체적인 클래스의 선택을 서브 클래스로 미루는 디자인 패턴입니다. 장점: 유연성 증가: 객체 생성을 서브 클래스에 위임함으로써 새로운 종류의 객체를 추가하거나 기존 객체를 변경할 수 있습니다. 코드 재사용성: 팩토리 메서드는 공통된 인터페이스를 제공하므로 클라이언트 코드는 구체적인 클래스의 생성 로직을 알 필요 없이 객체를 생성할 수 있습니다. 확장성: 새로운 서브 클래스를 추가함으로써 시스템을 확장하는 데 용이합니다. 단점: 클래스 수 증가: 새로운 객체를 추가할 때마다 새로운 팩토리 클래스가 필요하므로 클래스의 수가 늘어날 수 있습니다. 구현 강제: 팩토리 메서드 패턴은 인터페이스나 추상 ..

개발/자바 2024.01.10

[java] 싱글턴(Singleton) 패턴 설명 및 코드

싱글턴(Singleton) 패턴은 객체지향 디자인 패턴 중 하나로, 어떤 클래스가 오직 하나의 인스턴스만을 가지도록 보장하는 패턴입니다. 이 패턴을 사용하면 해당 클래스의 인스턴스를 여러 번 생성하지 않고 하나의 공유 인스턴스를 사용할 수 있습니다. 주로 리소스 공유, 설정 관리, 로깅 등의 상황에서 유용하게 쓰입니다. 싱글턴 패턴을 구현하는 가장 일반적인 방법은 다음과 같습니다. 생성자를 private으로 만들어 외부에서 객체를 직접 생성하는 것을 막습니다. 정적 메서드(static method)를 통해 객체를 반환하고, 해당 객체가 없을 경우에만 객체를 생성합니다. 객체는 처음 생성된 이후에는 항상 같은 객체를 반환합니다. 예시 public class Singleton { // 1. 생성자를 priv..

개발/자바 2024.01.09

디자인 패턴 정의 및 종류

디자인 패턴(Design Pattern)은 소프트웨어 디자인에서 자주 발생하는 문제에 대한 해결책을 일반적이고 재사용 가능한 형태로 정리한 것입니다. 이러한 패턴은 특정 맥락에서 자주 발생하는 설계 문제를 해결하기 위한 일종의 템플릿으로, 개발자들이 공통된 언어와 개념을 사용하여 소프트웨어를 구축할 수 있게 도와줍니다. 디자인 패턴은 주로 객체지향 프로그래밍에서 사용되며, 코드의 유지보수성을 향상시키고 재사용성을 높이는 목적으로 도입됩니다. 디자인 패턴은 크게 세 가지 유형으로 나뉩니다. 생성 패턴(Creational Patterns): 객체의 생성과 초기화에 관련된 패턴으로, 객체 생성을 추상화하고, 시스템이 어떻게 객체를 생성 및 조합할지에 대한 문제를 다룹니다. 구조 패턴(Structural Pat..

개발/자바 2024.01.09
728x90
반응형