Java64 [구조 패턴] Chapter 10. Facade Pattern 퍼사드 패턴, 소개 퍼사드 패턴은 어떤 시스템이나 라이브러리의 복잡한 기능을 클라이언트에게 더 쉽게 제공하기 위한 패턴이다. 클라이언트가 복잡한 서브시스템과 직접적으로 상호작용하는 대신, 간단한 퍼사드 인터페이스와 상호작용하게끔 한다. 이를 통해 클라이언트는 서브시스템의 내부 구조를 알 필요 없이 퍼사드 인터페이스를 통해 간단하게 사용할 수 있다. 여담으로 비침투적인 스프링 프레임워크도 이러한 퍼사드 정신을 가지고 있다고 본다. 퍼사드 패턴, 코드 before OrderProcessor.java, PaymentProcessor.java, InventoryManager.java 주문, 결제, 재고 관리로 이어지는 세 개의 서브시스템 // 서브시스템 1: 주문 처리 class OrderProcessor { .. 2023. 12. 11. [구조 패턴] Chapter 9. Decorator Pattern 데코레이터 패턴, 소개 데코레이터 패턴은 기존의 객체를 수정하지 않고 새로운 기능을 추가하거나 확장할 수 있게 만드는 패턴으로, 기존 클래스의 구조를 변경하지 않고 런 타임에 부가 기능을 추가하는 장점을 가지고 있다. 데코레이터 패턴은 다음과 같은 상황에 유용하다. 첫째로, 기존의 클래스를 변경하기 어렵고 동시에 새로운 기능이나 행동을 추가해야 할 때 둘째로, 여러 기능을 일련의 순서에 맞게 조합해서 사용해야 하는 경우 유용하다. 정리하면, 데코레이터 패턴의 핵심은 기존의 객체를 변경하지 않고도 새로운 기능을 추 할 수 있다는 점이다. 이는 객체 지향의 개방/폐쇄 원칙을 따르며, 코드의 유지 보수와 확장성을 높일 수 있다. 데코레이터 패턴, 코드 before CommentProcessor.java 단순 .. 2023. 12. 11. [구조 패턴] Chapter 8. Composite Pattern 컴포짓 패턴, 소개 컴포짓 디자인 패턴은 개체들을 트리 구조로 구성하여 개별 객체와 복합 객체를 동일하게 다룰 수 있게 하는 구조 패턴이다. 이 패턴을 적용하면 클라이언트 코드는 개별 객체와 복합 객체를 구분하지 않고 동일한 인터페이스 기반으로 코드를 작성할 수 있도록 한다. 단순히 추상화 시킨다고 생각하면 된다. 다만 컴포짓 패턴이 적용되기 위해선 두 가지 조건이 있다. 첫째로, 단일 객체와 복합 객체를 동일하게 처리해야 하는 니즈가 있을 때 둘째로, 개별 객체와 복합 객체가 트리 구조를 만족해야 한다. 다른 말로 재귀적 구조를 만족해야 한다. 브랫지 패턴, 적용하기 Before Product.java @AllArgsConstructor public class Product { private Strin.. 2023. 12. 10. [Java] 공변성으로 알아보는 제네릭과 와일드카드 서론 공변성과 제네릭 그리고 와일드카드에 대해서 알아보고 마지막으로 @SafeVarargs 어노테이션을 소개로 마무리한다. 공변성과 배열 자바의 공변성은 하위 클래스의 객체를 상위 클래스의 참조 변수로 참조할 수 있는 성질을 의미한다. 다르게 말하면 상속 관계에서 파생된 클래스의 객체가 부모 클래스의 객체처럼 취급될 수 있음을 말한다. 자바에서 공변성을 만족하는 대표적인 예시가 바로 배열이다. 예를 들어, 배열의 원소 타입이 상속 관계를 가질 때, 배열 자체의 타입 간에도 상속 관계가 유지된다. 간단히 말하면 하위 타입의 배열은 상위 타입의 배열로 취급될 수 있다. @Test void test_array() { Number[] numbers = new Number[4]; numbers[0] = 1; nu.. 2023. 12. 6. JMH(Java Microbenchmark Harness) 사용 예제 JMH(Java Microbenchmark Harness) JMH는 Java 언어로 작성된 코드의 성능을 측정하는 도구로, 특히 벤치 마이크로벤치마크를 수행하는 데 사용한다. 마이크로벤치마크는 작은 단위의 코드에 대한 경과 시간, 명령어 처리 속도 등을 측정하는 프로그램을 의미한다. 이는 성능 최적화나 코드 변경에 대한 영향을 정량적으로 측정할 때 유용하게 사용할 수 있다. 환경 설정 신뢰할 수 있는 결과를 얻기 위해서는 Maven을 사용해서 jar 파일로 빌드하고 이를 실행해서 테스트하길 권장하고 있다. IDE에서 실행하는 테스트는 결과의 신뢰성이 떨어진다는게 공식 문서의 입장이다. 샘플 maven project 생성 $ mvn archetype:generate -DinteractiveMode=fals.. 2023. 11. 19. [구조 패턴] Chapter 7. Bridge Pattern ✍️ 브릿지 패턴, 소개 브릿지 패턴은 하나의 클래스로부터 파생되는 두 가지 개념을 분리하여 각각을 독립적으로 확장하고, 이를 두 개의 컴포넌트로 결합하는 디자인 패턴이다. 이 패턴을 도입하는 대표적인 케이스는 두 가지 다른 속성을 조합하여 하나의 클래스로 표현하는 작업이 반복적으로 발생할 때이다. 브릿지 패턴을 설명하는 대표적인 예시로 도형과 색을 이야기할 수 있다. Shape에서 파생되는 두 가지 개념 도형과 색을 조합하여 하나의 클래스로 표현하다 보면 중복 코드 증가, 코드의 결합도 상승, 기능 수정과 확장에서 문제가 발생한다. 브릿지 패턴은 서로 다른 속성을 클래스로 분리하고, 한 쪽 클래스가 다른 쪽 클래스를 포함하는 컴포지션을 통해 문제를 해결한다. 이 물리적인 클래스 분리로 클라이언트가 직접.. 2023. 11. 12. [Java] Enum을 활용하는 방법 ✍️ 서론 논리적으로 연관된 상수를 정의할 때 사용하는 자료형 enum. enum은 심볼릭하게 그 자체로도 의미를 가지지만 필요에 따라 필드를 추가하거나 메서드를 추상화해서 enum이 책임질 수 있는 코드를 구현할 수 있다. 🍊 simple enum enum의 가장 단순한 사용법으로 보통 상태 값이나, 분기를 위한 플래그로 사용된다. public enum Operator { PLUS, MINUS, MULTIPLY, DIVIDE; } public class Calculator { public double calculate(double a, double b, Operator op) { if (op == Operator.PLUS) { return a + b; } else if (op == Operator.MI.. 2022. 12. 6. [Java8] 반복문에서 CompletableFuture 사용하기, CompletableFuture in loop ✍️ CompletableFuture in loop 다수의 쓰레드를 만들고, 반복된 작업을 비동기적으로 여러 번 수행하고, 수행 결과를 집계하는 코드를 작성해야 할 때가 있다. 가령 뽑기와 같은 확률 로직이 포함된 서비스의 테스트 코드 작성 시에 이와 같은 니즈가 발생한다. 이때 CompletableFuture를 사용하면 비동기 작업과 콜백 메서드를 매우 쉽게 정의할 수 있다. 아래 코드는 반복문 내부에서 CompletableFutre를 만들어 비동기적으로 작업을 수행해서 결과를 반환하고 콜백 메서드에서 결과를 집계하는 샘플 코드이다. public class ParallelAdder { private List synchronizedList = Collections.synchronizedList(new A.. 2022. 11. 14. [Java] JWT (JSON Web Token) 개념 및 예제 코드 ✍️ JWT (JSON Web Token) 개념 JWT(JSON Web Token)란 선택적 서명 혹은 선택적 암호화를 사용해 데이터를 만드는 인터넷 표준으로, 헤더, 페이로드, 서명으로 구성된다. 페이로드는 클레임(claim)을 담은 JSON 형태이며 서명은 무결성과 인증을 위해 사용된다. 쉽게 말하면 JSON 포맷을 이용해서 사용자 정보를 저장하는 Web Token으로, 클라이언트 서버 구조에서 주로 인증과 데이터 전달에 사용된다. 여기서 선택적 서명과 선택적 암호화라는 말이 나오는데 JWT에 서명을 추가하면 무결성이 보장되는 JWS가 되고, 암호화를 추가하면 무결성과 기밀성이 보장되는 JWE가 된다. 비유하자면 JWT를 확장한 클래스가 JWS 혹은 JWE라고 할 수 있다. 하지만 JWT를 이야기할 .. 2022. 10. 4. 이전 1 2 3 4 ··· 8 다음 반응형