300x250
퍼사드 패턴, 소개 퍼사드 패턴은 어떤 시스템이나 라이브러리의 복잡한 기능을 클라이언트에게 더 쉽게 제공하기 위한 패턴이다. 클라이언트가 복잡한 서브시스템과 직접적으로 상호작용하는 대신, 간단한 퍼사드 인터페이스와 상호작용하게끔 한다. 이를 통해 클라이언트는 서브시스템의 내부 구조를 알 필요 없이 퍼사드 인터페이스를 통해 간단하게 사용할 수 있다. 여담으로 비침투적인 스프링 프레임워크도 이러한 퍼사드 정신을 가지고 있다고 본다. 퍼사드 패턴, 코드 before OrderProcessor.java, PaymentProcessor.java, InventoryManager.java 주문, 결제, 재고 관리로 이어지는 세 개의 서브시스템 // 서브시스템 1: 주문 처리 class OrderProcessor { ..
데코레이터 패턴, 소개 데코레이터 패턴은 기존의 객체를 수정하지 않고 새로운 기능을 추가하거나 확장할 수 있게 만드는 패턴으로, 기존 클래스의 구조를 변경하지 않고 런 타임에 부가 기능을 추가하는 장점을 가지고 있다. 데코레이터 패턴은 다음과 같은 상황에 유용하다. 첫째로, 기존의 클래스를 변경하기 어렵고 동시에 새로운 기능이나 행동을 추가해야 할 때 둘째로, 여러 기능을 일련의 순서에 맞게 조합해서 사용해야 하는 경우 유용하다. 정리하면, 데코레이터 패턴의 핵심은 기존의 객체를 변경하지 않고도 새로운 기능을 추 할 수 있다는 점이다. 이는 객체 지향의 개방/폐쇄 원칙을 따르며, 코드의 유지 보수와 확장성을 높일 수 있다. 데코레이터 패턴, 코드 before CommentProcessor.java 단순 ..
컴포짓 패턴, 소개 컴포짓 디자인 패턴은 개체들을 트리 구조로 구성하여 개별 객체와 복합 객체를 동일하게 다룰 수 있게 하는 구조 패턴이다. 이 패턴을 적용하면 클라이언트 코드는 개별 객체와 복합 객체를 구분하지 않고 동일한 인터페이스 기반으로 코드를 작성할 수 있도록 한다. 단순히 추상화 시킨다고 생각하면 된다. 다만 컴포짓 패턴이 적용되기 위해선 두 가지 조건이 있다. 첫째로, 단일 객체와 복합 객체를 동일하게 처리해야 하는 니즈가 있을 때 둘째로, 개별 객체와 복합 객체가 트리 구조를 만족해야 한다. 다른 말로 재귀적 구조를 만족해야 한다. 브랫지 패턴, 적용하기 Before Product.java @AllArgsConstructor public class Product { private Strin..
✍️ 브릿지 패턴, 소개 브릿지 패턴은 하나의 클래스로부터 파생되는 두 가지 개념을 분리하여 각각을 독립적으로 확장하고, 이를 두 개의 컴포넌트로 결합하는 디자인 패턴이다. 이 패턴을 도입하는 대표적인 케이스는 두 가지 다른 속성을 조합하여 하나의 클래스로 표현하는 작업이 반복적으로 발생할 때이다. 브릿지 패턴을 설명하는 대표적인 예시로 도형과 색을 이야기할 수 있다. Shape에서 파생되는 두 가지 개념 도형과 색을 조합하여 하나의 클래스로 표현하다 보면 중복 코드 증가, 코드의 결합도 상승, 기능 수정과 확장에서 문제가 발생한다. 브릿지 패턴은 서로 다른 속성을 클래스로 분리하고, 한 쪽 클래스가 다른 쪽 클래스를 포함하는 컴포지션을 통해 문제를 해결한다. 이 물리적인 클래스 분리로 클라이언트가 직접..
[구조 패턴] Chapter 6-1. Adapter Pattern : 패턴 소개 코드 설명은 이전 포스팅을 참조 ✍️ 어댑터 패턴, 적용하기 본 포스팅에선 어댑티와 클라이언트의 간극을 어댑터로 메꾸는 코드를 작성해 소개할 생각입니다. 예시 코드에서 클라이언트 코드는 LoginHandler에 해당하고, 클라이언트가 사용하는 UserDetails와 UserDetailsService는 Target interface에 해당한다. public class LoginHandler { private UserDetailsService userDetailsService; public LoginHandler(UserDetailsService userDetailsService){ this.userDetailsService =..
✍️ 어댑터 패턴, 패턴 소개 어댑터 패턴은 일상생활에서도 흔히 찾아볼 수 있는데, 220V 코드를 110V 콘센트에 꽂을 때 흔히 돼지코라고 불리는 어댑터를 사용해 본 경험이 있을 것이다. 바로 이 돼지코가 어댑터 패턴과 유사한 실생활 사례라고 할 수 있다. 이제 소프트웨어적 측면에서 어댑터 패턴을 설명하면, Client가 사용하는 Interface는 정해져있는데 내가 작성한 코드(Adaptee)는 해당 Interface를 따르지 않을 때 Client와 Adaptee 사이의 간극을 Adapter로 메꿔서 Adaptee를 재사용할 수 있도록 하는 패턴이다. 정리하면 '기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴이다.' 언제나 그렇듯... 말로는 너무 어렵다 코드를 보자. 🍊 어댑..