본문 바로가기

객체지향/디자인패턴7

데코레이터 패턴 GOF 디자인 패턴의 구조 패턴중 하나이다.프록시 패턴과 유사하지만 프록시 패턴을 통해 부가기능을 추가하는 것을 데코레이터 패턴이라고 한다. 프록시와 데코레이더는 의도가 다르다. 프록시 패턴은 접근 제어를 위한 대리자 데코레이터는 객체에 추가 책임을 동적으로 추가하는 것이다. 기존 코드public interface Component { String operation();}@Slf4jpublic class DecoratorPatternClient { private Component component; public DecoratorPatternClient(Component component) { this.component = component; } public void.. 2026. 2. 18.
템플릿 콜백 패턴 GOF의 디자인패턴에 속한 것은 아니다. 전략 패턴의 일종으로 스프링 내부에서 자주 사용된다.JDBC템플릿, Rest템플릿, 트랜잭션템플릿, 레디스템플릿등 뒤에 템플릿붙어있으면 템플릿콜백패턴이 사용된거다.콜백이란 다른 코드의 인수로서 넘겨주는 실행 가능한 코드다.이전 전략패턴에서 콘텍스트가 템플릿 역할을 하고 전략부분이 콜백으로 넘어온다. 복잡하지만 바뀌지 않는 일정한 패턴을 갖는 작업 흐름이 존재하고 그 중 일부분만 자주 바꿔서 사용해야 하는 경우에 적합전략 패턴의 기존 구조에 익명 내부 클래스 활용전략 패턴의 컨텍스트를 템플릿 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부름템플릿은 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀을 가리킴프로그래밍에서는 고정된 틀 안에 바꿀수있는 부분을 넣어서.. 2026. 2. 18.
전략 패턴 GOF 디자인 패턴의 행위 패턴중 하나이다. 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에 두어서 상속을 사용한다.전략패턴은 변하지 않는 부분을 콘텍스트에 두고 변하는 부분을 전략인터페이스를 만들고 그 인터페이스를 구현해서 문제를 해결함 상속이 아니라 위임으로 문제를 해결한다. private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 log.info("비즈니스 로직1 실행"); //비즈니스 로직 종료 long endTime = System.currentTimeMillis(); long resultTime = endTime - startT.. 2026. 2. 18.
템플릿 메서드 패턴 GOF 디자인패턴의 하나이다. 행위 패턴으로 구분되어있다.템플릿 메서드 패턴은 부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에 정의한다. 이렇게 하면 자식 클래스가 알고리즘의 전체 구조를 변경하지 않고 특정 부분만 재정의할 수 있다. 상속과 오버라이딩을 통한 다형성으로 문제를 해결하는 것이다. 단점 : 상속을 사용하여 상속의 단점을 안고간다. 자식 클래스가 부모 클래스가 컴파일 시점에 강결합된다. 자식 클래스는 부모 클래스의 로직을 전혀쓰지 않는다. 그럼에도 자식 클래스는 부모 클래스를 상속하고 있다. 상속을 받는다는 것은 의존하고 있다는 것이다. 부모클래스의 영향이 자식에게도 전달된다는 것 예를들어 부모클래스에서 추상 메서드가 하나 더 생기면 자식 클래스들은 다.. 2026. 2. 15.
옵저버 패턴 GOF의 디자인패턴중 하나로 행위 패턴에 속한다.스프링의 ApplicationEventPublisher의 동작 원리다. if (paymentSuccess) { order.setStatus(OrderStatus.PAID); // 4단계: 알림 발송 notificationService.notifyOrderPaid(order);} else { order.setStatus(OrderStatus.CANCELLED); notificationService.notifyOrderCancelled(order);}현재 주문을 하고 알림을 발송한다. public class OrderService { private final PaymentService paymentService; priva.. 2026. 2. 12.
프록시 패턴 프록시 패턴 — 객체 생성을 지연시키는 구조프록시 패턴은 어떤 객체에 대한 접근을 다른 객체가 대신 제어하는 구조다.클라이언트는 실제 객체를 직접 다루지 않고, 대리 객체(Proxy) 를 통해 간접적으로 접근한다.이 패턴은 다음과 같은 상황에서 자주 사용된다.객체 생성 비용이 매우 클 때실제 객체 사용이 항상 필요한 것이 아닐 때접근 시점에 부가 로직을 끼워 넣고 싶을 때Hibernate의 지연 로딩(Lazy Loading) 이 대표적인 실사용 사례다.예제로 볼 프록시 구조이번 예제는 이미지 로딩을 예로 든 전형적인 프록시 패턴이다.역할 분리역할클래스 공통 인터페이스Image실제 객체 (Target)RealImage프록시 객체ProxyImage클라이언트ProxyMain공통 인터페이스 package com.. 2026. 1. 4.
싱글톤 패턴 어떤 클래스를 애플리케이션에서 제한된 인스턴수 개수 또는 하나만 존재하도록 강제함 이렇게 만들어지는 클래스의 오브텍트는 애플리케이션 내에서 전역적 접근가능 단일 오브젝트만 존재해야하고 이것을 애플리켕션의 여러 곳에서 공유하는 경우에 사용 public class AppConfig { private static final AppConfig singleton = new AppConfig(); private final Map configs = new HashMap(); public static AppConfig getSingleton() { return singleton; } // 현재는 아무나 생성 가능! private AppConfig() { .. 2025. 12. 21.