데코레이터 패턴 (decorator pattern)

JunSeong_Park·2023년 1월 1일
0
post-custom-banner

Decorator Pattern

데코레이터는 메서드 호출의 반환값에 변화를 주기 위한 장식자

Proxy Pattern 은 OCP ( Open Closed Principle ) 와 DIP ( Dependency Inversion Principle ) 을 적용

Ex)

Decorator Pattern 을 적용한 상태

public class Service implements IService{

    @Override
    public String runSomething() {
        return "Service method";
    }
}
public interface IService {
    public abstract String runSomething();
}
public class Decorator implements IService{
    IService service;

    @Override
    public String runSomething() {
        System.out.println("호출에 대한 장식 주목적 , 클라이언트에게 반환 결과에 장식을 더하여 전달");

        service = new Service();
        return service.runSomething()+" with Decorator";
    }
}

Main

public class ClientWithDecorator {
    public static void main(String [] args) {
        IService decorator = new Decorator();
        System.out.println(decorator.runSomething());
    }
}
  1. Decorator 는 Service 와 같은 이름의 Method 를 구현 → IService ( interface ) 사용
  2. Decorator 에서 Service 객체 즉 참조 변수를 생성
  3. Decorator 에서 Service 와 같은 이름을 가진 Method 호출 , 그 반환값에 장식을 더해 반환
    —> Decorator 와 Service 둘 다 같은 interface 를 implements 하기에 가능
  4. Decorator 는 Service 의 method 호출 전후에 별도의 로직을 수행할 수 있다.
    아래 예시를 보자
public class Decorator implements IService{
    IService service;

    @Override
    public String runSomething() {
        System.out.println("호출에 대한 장식 주목적 , 클라이언트에게 반환 결과에 장식을 더하여 전달");
				
        service = new Service();
				
				String str = "method 호출 전 로직 ";
        str += service.runSomething();
				str += " method 호출 후 로직";
				return str;
    }
}

출처 : 스프링 입문을 위한 자바

profile
안녕하세요 언어에 구애 받지 않는 개발자가 되고 싶은 박준성입니다
post-custom-banner

0개의 댓글