반응형

싱글톤을 사용한 이중 확인 잠금

1. 소개 이 사용방법(예제)에서는 이중 확인 잠금 디자인 패턴에 대해 설명합니다. 이 패턴은 잠금 조건을 미리 확인하여 잠금 획득 횟수를 줄입니다. 그 결과 일반적으로 성능이 향상됩니다. 그러나 double-checked locking은 Java 5 이전에 깨졌다는 점에 유의해야 합니다 . 어떻게 작동하는지 자세히 살펴보겠습니다. 2. 시행 먼저 엄격한 동기화를 사용하는 간단한 싱글톤을 고려해 보겠습니다. public class DraconianSingleton { private static DraconianSingleton instance; public static synchronized DraconianSingleton getInstance() { if (instance == null) { inst..

Spring 2022.12.12

FreeBuilder로 빌더 패턴 자동 생성

1. 개요 이 사용방법(예제)에서는 FreeBuilder 라이브러리를 사용하여 Java에서 빌더 클래스를 생성합니다. 2. 빌더 디자인 패턴 빌더는 객체 지향 언어에서 가장 널리 사용되는 생성 디자인 패턴 중 하나입니다. 복잡한 도메인 개체의 인스턴스화를 추상화하고 인스턴스 생성을 위한 유창한 API를 제공 합니다 . 따라서 간결한 도메인 계층을 유지하는 데 도움이 됩니다. 유용함에도 불구하고 빌더는 일반적으로 특히 Java에서 구현하기 복잡합니다. 더 간단한 값 개체에도 많은 상용구 코드가 필요합니다. 3. Java에서 빌더 구현 FreeBuilder를 진행하기 전에 Employee 클래스 에 대한 상용구 빌더를 구현해 보겠습니다 . public class Employee { private final ..

Spring 2022.12.12

Java에서 많은 if 문을 바꾸는 방법

1. 개요 결정 구조는 모든 프로그래밍 언어의 중요한 부분입니다. 그러나 우리는 코드를 더 복잡하고 유지하기 어렵게 만드는 수많은 중첩된 if 문을 코딩하게 됩니다. 이 사용방법(예제)에서는 중첩된 if 문을 대체하는 다양한 방법을 살펴보겠습니다 . 코드를 단순화할 수 있는 다양한 옵션을 살펴보겠습니다. 2. 사례 연구 종종 우리는 많은 조건을 포함하고 각각 다른 처리가 필요한 비즈니스 로직을 접하게 됩니다. 데모를 위해 Calculator 클래스의 예를 들어 보겠습니다. 두 개의 숫자와 연산자를 입력으로 사용하고 작업에 따라 결과를 반환하는 메서드가 있습니다. public int calculate(int a, int b, String operator) { int result = Integer.MIN_V..

Spring 2022.12.12

Java의 프로토타입 패턴

1. 소개 이 예제에서는 Creational Design Patterns 중 하나인 Prototype 패턴에 대해 알아봅니다 . 먼저 이 패턴에 대해 설명하고 Java로 구현해 보겠습니다. 또한 몇 가지 장점과 단점에 대해서도 논의할 것입니다. 2. 프로토타입 패턴 프로토타입 패턴은 일반적으로 클래스(프로토타입)의 인스턴스가 있고 프로토타입을 복사하여 새 객체를 만들고 싶을 때 사용됩니다 . 이 패턴을 더 잘 이해하기 위해 비유를 사용합시다. 일부 게임에서는 배경에 나무나 건물이 필요합니다. 캐릭터가 움직일 때마다 새 나무나 건물을 만들고 화면에 렌더링할 필요가 없다는 것을 깨달을 수 있습니다. 따라서 먼저 트리의 인스턴스를 만듭니다. 그런 다음 이 인스턴스(프로토타입)에서 원하는 만큼 트리를 만들고 위..

Spring 2022.12.12

자바 커링

1. 소개 Java 8부터 우리는 Java에서 하나 또는 두 개의 매개변수 함수를 정의할 수 있으므로 매개변수로 전달하여 해당 동작을 다른 함수에 주입할 수 있습니다. 그러나 매개변수가 더 많은 함수의 경우 Vavr 과 같은 외부 라이브러리에 의존합니다 . 또 다른 옵션은 커링을 사용하는 것입니다 . 커링과 기능적 인터페이스를 결합하여 사용자가 모든 입력을 제공하도록 하는 읽기 쉬운 빌더를 정의할 수도 있습니다. 이 예제에서는 커링을 정의하고 사용법을 제시합니다 . 2. 간단한 예 여러 매개변수가 있는 문자의 구체적인 예를 살펴보겠습니다. 간소화된 첫 번째 버전에는 본문과 인사말만 필요합니다. class Letter { private String salutation; private String body;..

Spring 2022.12.12

Java의 파사드 디자인 패턴

1. 소개 이 빠른 사용방법(예제)에서는 구조 디자인 패턴 중 하나인 Facade를 살펴보겠습니다 . 먼저 패턴에 대한 개요를 제공하고 이점을 나열하며 어떤 문제를 해결하는지 설명합니다. 그런 다음 외관 패턴을 Java의 기존 실제 문제에 적용합니다. 2. 외관이란 무엇입니까? 간단히 말해서 파사드는 간단한 인터페이스 뒤에 복잡한 하위 시스템을 캡슐화합니다. 복잡성의 상당 부분을 숨기고 하위 시스템을 사용하기 쉽게 만듭니다. 또한 복잡한 하위 시스템을 직접 사용해야 하는 경우에도 그렇게 할 수 있습니다. 우리는 항상 파사드를 사용하도록 강요받지 않습니다. 훨씬 간단한 인터페이스 외에도 이 디자인 패턴을 사용하면 얻을 수 있는 이점이 하나 더 있습니다. 복잡한 하위 시스템에서 클라이언트 구현을 분리합니다...

Spring 2022.12.12

자바의 데코레이터 패턴

1. 개요 데코레이터 패턴을 사용하여 객체에 정적 또는 동적으로 추가 책임을 부여할 수 있습니다. Decorator는 원본 개체에 향상된 인터페이스를 제공합니다. 이 패턴의 구현에서 상속보다 구성을 선호하므로 각 데코레이팅 요소에 대해 계속해서 서브클래싱하는 오버헤드를 줄일 수 있습니다. 이 디자인과 관련된 재귀는 필요한 만큼 개체를 장식하는 데 사용할 수 있습니다. 2. 데코레이터 패턴 예제 크리스마스 트리 개체가 있고 그것을 장식하고 싶다고 가정합니다. 장식은 개체 자체를 변경하지 않습니다. 크리스마스 트리 외에도 화환, 틴셀, 트리 토퍼, 버블 조명 등과 같은 몇 가지 장식 항목을 추가하고 있습니다. 이 시나리오에서는 원래 Gang of Four 디자인 및 명명 규칙을 따릅니다. 먼저 Christm..

Spring 2022.12.11

Java의 어댑터 패턴

1. 개요 이 빠른 사용방법(예제)에서는 어댑터 패턴과 해당 Java 구현을 살펴보겠습니다. 2. 어댑터 패턴 어댑터 패턴은 직접 연결할 수 없는 두 개의 호환되지 않는 인터페이스 간의 커넥터 역할을 합니다. 어댑터는 클라이언트의 인터페이스와 호환되도록 기존 클래스를 새 인터페이스로 래핑합니다. 이 패턴을 사용하는 주된 동기는 기존 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하는 것입니다. 일반적으로 애플리케이션이 디자인되면 구현됩니다. 2.1. 어댑터 패턴 예 고급 자동차의 최고 속도를 시속 마일(MPH) 단위로 반환하는 앱이 미국에서 개발된 시나리오를 생각해 보세요. 이제 동일한 결과를 원하지만 시간당 킬로미터(km/h)를 원하는 영국 고객을 위해 동일한 앱을 사용해야 합니다. 이 문제를..

Spring 2022.12.11

Java의 프록시 패턴

1. 개요 프록시 패턴을 사용하면 구성 요소의 기본 복잡성을 숨기면서 다른 리소스에 대한 인터페이스 역할을 하는 중개자를 만들 수 있습니다 . 2. 프록시 패턴 예시 일부 초기 구성이 필요한 무거운 Java 객체(JDBC 연결 또는 SessionFactory 와 같은 ) 를 고려하십시오. 우리는 이러한 개체가 요청 시 초기화되기를 원하고 일단 초기화되면 모든 호출에 다시 사용하려고 합니다. 이제 이 개체에 대한 간단한 인터페이스와 구성을 만들어 보겠습니다. public interface ExpensiveObject { void process(); } 대규모 초기 구성으로 이 인터페이스를 구현합니다. public class ExpensiveObjectImpl implements ExpensiveObject..

Spring 2022.12.11

자바의 브리지 패턴

1. 개요 GoF(Gang of Four)에서 소개한 브리지 디자인 패턴의 공식 정의는 구현에서 추상화를 분리하여 둘이 독립적으로 변경될 수 있도록 하는 것입니다. 이는 책임을 다른 추상 클래스로 분리하기 위해 OOP 원칙을 사용하는 브리지 인터페이스를 만드는 것을 의미합니다. 2. 브릿지 패턴 예시 브리지 패턴의 경우 두 가지 추상화 계층을 고려합니다. 하나는 다른 색상으로 채워진 기하학적 모양(삼각형 및 사각형과 같은)입니다(두 번째 추상화 레이어). 먼저 색상 인터페이스를 정의합니다. public interface Color { String fill(); } 이제 이 인터페이스에 대한 구체적인 클래스를 만듭니다. public class Blue implements Color { @Override p..

Spring 2022.12.11
반응형