창조적 디자인 패턴 소개


소개

소프트웨어 엔지니어링에서 디자인 패턴은 소프트웨어에서 가장 일반적으로 발생하는 문제에 대한 확립 된 솔루션을 설명합니다. 디자인. 경험 많은 소프트웨어 개발자의 시행 착오를 통해 오랜 기간에 걸쳐 발전된 모범 사례를 나타냅니다.

Design Patterns는 Erich Gamma가 1994 년에 출판 한 Design Patterns : Elements of Reusable Object-Oriented Software 책 이후 인기를 얻었습니다. , John Vlissides, Ralph Johnson 및 Richard Helm (Gang of Four 또는 GoF라고도 함).

이 기사에서는 창의적인 디자인 패턴과 그 유형을 살펴 보겠습니다. 코드 샘플을 작성하고 이러한 패턴이 우리의 디자인에 맞는 상황에 대해 논의하십시오.

창조적 디자인 패턴

창조적 디자인 패턴은 개체가 생성되는 방식과 관련됩니다. . 제어 된 방식으로 개체를 생성하여 복잡성과 불안정성을 줄입니다.

새 연산자는 응용 프로그램 전체에 개체를 분산시키기 때문에 종종 유해한 것으로 간주됩니다. 시간이 지남에 따라 클래스가 긴밀하게 결합되어 구현을 변경하는 것이 어려울 수 있습니다.

크리에이션 디자인 패턴은 클라이언트를 실제 초기화 프로세스에서 완전히 분리하여이 문제를 해결합니다.

이 기사에서는 , 우리는 네 가지 유형의 생성 디자인 패턴에 대해 논의 할 것입니다.

  1. 싱글 톤 – 애플리케이션 전체에 개체의 인스턴스가 최대 하나만 존재하도록합니다.
  2. Factory Method – 다음과 같은 개체를 만듭니다. 생성 할 정확한 개체를 지정하지 않고 여러 관련 클래스
  3. Abstract Factory – 관련 종속 개체의 패밀리를 생성합니다.
  4. Builder – 단계별 접근 방식을 사용하여 복잡한 개체를 생성합니다.

이제 이러한 각 패턴에 대해 자세히 설명하겠습니다.

싱글 톤 디자인 패턴

싱글 톤 디자인 패턴은 Java Virtual Machine 전체에 개체의 인스턴스가 하나만 존재하는지 확인하여 특정 클래스의 개체 초기화 확인

Singleton 클래스는 또한 개체에 대한 하나의 고유 한 전역 액세스 지점을 제공하여 액세스 지점에 대한 각 후속 호출이 해당 특정 개체 만 반환하도록합니다.

3.1. 싱글 톤 패턴 예제

싱글 톤 패턴은 GoF에 의해 도입되었지만 원래 구현은 다중 스레드 시나리오에서 문제가있는 것으로 알려져 있습니다.

그래서 여기에서 우리는 ” 정적 내부 클래스를 사용하는보다 최적의 접근 방식을 따를 것입니다.

여기서 우리는 Singleton 클래스의 인스턴스를 보유하는 정적 내부 클래스를 만들었습니다. 외부 클래스가로드 될 때가 아니라 누군가 getInstance () 메서드를 호출 할 때만 인스턴스를 생성합니다.

이것은 동기화가 필요하지 않고 스레드로부터 안전하기 때문에 Singleton 클래스에 널리 사용되는 접근 방식입니다. , 지연 초기화를 시행하고 상대적으로 상용구가 적습니다.

또한 생성자에는 개인 액세스 수정자가 있습니다. 공개 생성자는 누구나 액세스하여 새 인스턴스를 만들 수 있으므로 Singleton을 만들기위한 요구 사항입니다.

이것은 원래 GoF 구현이 아니라는 것을 기억하십시오. 원래 버전의 경우 여기를 방문하십시오. Java의 싱글 톤에 대한 링크 된 Baeldung 기사.

3.2. 싱글 톤 디자인 패턴을 사용하는 경우

  • 생성 비용이 많이 드는 리소스 (예 : 데이터베이스 연결 개체)
  • 모든 로거를 성능을 향상시키는 싱글 톤으로 유지하는 것이 좋습니다.
  • 애플리케이션의 구성 설정에 대한 액세스를 제공하는 클래스
  • 공유 모드에서 액세스되는 리소스를 포함합니다.

Factory Method Design Pattern

Factory Design Pattern 또는 Factory Method Design Pattern은 다음 중 하나입니다. Java에서 가장 많이 사용되는 디자인 패턴입니다.

GoF에 따르면이 패턴은 “객체 생성을위한 인터페이스를 정의하지만 하위 클래스가 인스턴스화 할 클래스를 결정하도록합니다. tiate. Factory 메서드를 사용하면 클래스가 하위 클래스로 인스턴스화를 연기 할 수 있습니다.”

이 패턴은 가상 생성자의 유형을 생성하여 클라이언트에서 특정 팩토리 클래스로 클래스를 초기화하는 책임을 위임합니다.

이를 달성하기 위해 우리는 실제 구현 세부 사항을 숨기고 객체를 제공하는 공장에 의존합니다. 생성 된 개체는 공통 인터페이스를 사용하여 액세스됩니다.

4.1. 팩토리 메소드 디자인 패턴 예제

이 예제에서는 몇 가지 구체적인 클래스에 의해 구현 될 Polygon 인터페이스를 만듭니다. PolygonFactory는이 패밀리에서 객체를 가져 오는 데 사용됩니다. :

먼저 Polygon 인터페이스를 만듭니다.

다음으로 이 인터페이스를 구현하고 Polygon 유형의 객체를 반환하는 Square, Triangle 등과 같은 몇 가지 구현을 만듭니다.

이제 측면의 수를 인수로 취하고이 인터페이스의 적절한 구현을 반환하는 팩토리를 만들 수 있습니다.

클라이언트가이 팩토리에 의존하여 우리에게 제공하는 방법에 주목하십시오. 개체를 직접 초기화 할 필요없이 적절한 다각형.

4.2. Factory Method Design Pattern을 사용하는 경우

  • 인터페이스 또는 추상 클래스의 구현이 자주 변경 될 것으로 예상되는 경우
  • 현재 구현의 경우 새로운 변경 사항을 편안하게 수용 할 수 없음
  • 초기화 프로세스가 비교적 간단하고 생성자에 소수의 매개 변수 만 필요한 경우

Abstract Factory Design Pattern

이전 섹션에서는 Factory Method 디자인 패턴을 사용하여 단일 패밀리와 관련된 개체를 만드는 방법을 살펴 보았습니다.

반대로 Abstract Factory 디자인 패턴이 사용됩니다. 관련되거나 종속 된 객체의 패밀리를 작성합니다. 공장 공장이라고도합니다.

자세한 설명은 Abstract Factory 튜토리얼을 확인하세요.

Builder Design Pattern

Builder 디자인 패턴은 비교적 복잡한 개체의 구성을 처리하기 위해 설계된 또 다른 생성 패턴입니다.

개체 생성의 복잡성이 증가하면 Builder 패턴은 다른 개체를 사용하여 인스턴스화 프로세스를 분리 할 수 있습니다. 개체 (빌더)를 사용하여 개체를 구성합니다.

이 빌더는 간단한 단계별 접근 방식을 사용하여 다른 유사한 표현을 만드는 데 사용할 수 있습니다.

6.1. Builder Pattern 예

GoF에서 소개 한 원래의 Builder Design Pattern은 추상화에 중점을두고 복잡한 객체를 다룰 때 매우 좋지만 디자인이 약간 복잡합니다.

Joshua Bloch는 그의 저서 Effective Java에서 깔끔하고 읽기 쉬운 빌더 패턴의 개선 된 버전을 소개했습니다. 유창한 디자인) 클라이언트의 관점에서 사용하기 쉽습니다. 이 예제에서는 해당 버전에 대해 설명합니다.

이 예제에는 정적 내부 클래스로 빌더를 포함하는 BankAccount 클래스가 하나만 있습니다.

외부 객체가 직접 접근하는 것을 원하지 않기 때문에 필드의 모든 액세스 수정자는 비공개로 선언됩니다.

생성자도 비공개이므로 빌더 만 여기에 할당됩니다. 클래스가 액세스 할 수 있습니다. 생성자에 설정된 모든 속성은 우리가 인수로 제공하는 빌더 개체에서 추출됩니다.

정적 내부 클래스에 BankAccountBuilder를 정의했습니다.

우리는 외부 클래스에 포함 된 동일한 필드 세트를 선언했습니다. 모든 필수 필드는 내부 클래스의 생성자에 대한 인수로 필요하며 나머지 선택적 필드는 setter 메서드를 사용하여 지정할 수 있습니다.

이 구현은 또한 setter 메서드가 빌더를 반환하도록함으로써 유창한 디자인 접근 방식을 지원합니다. 마지막으로, 빌드 메소드는 외부 클래스의 개인 생성자를 호출하고 자신을 인수로 전달합니다. 반환 된 BankAccount는 BankAccountBuilder가 설정 한 매개 변수로 인스턴스화됩니다.

작동중인 빌더 패턴의 간단한 예를 살펴 보겠습니다.

6.2. 빌더 패턴을 사용하는 경우

  1. 객체 생성과 관련된 프로세스가 매우 복잡하고 필수 및 선택적 매개 변수가 많을 때
  2. 생성자 매개 변수의 수가 증가하면 생성자 목록이 많아집니다.
  3. 클라이언트가 “생성 된 객체에 대해 다른 표현을 기대할 때

결론

이 기사에서는 Java의 생성 디자인 패턴에 대해 배웠습니다. 또한 4 가지 유형 (예 : Singleton, Factory Method, Abstract Factory 및 Builder Pattern), 장점, 예 및시기에 대해 논의했습니다. 우리는 그것들을 사용합니다.

항상 그렇듯이 전체 코드 스 니펫은 GitHub에서 사용할 수 있습니다.

Spring 학습 과정을 통해 Spring 5 및 Spring Boot 2 시작 :

> > 과정 확인

Leave a Reply

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다