SPRING 🍃/디자인패턴
디자인 패턴 - 데코레이터 패턴
절취선
2022. 4. 8. 11:18
반응형
🚀 스프링에서 디자인 패턴의 중요성
디자인 패턴
은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이
인정한 가장 효율적인 예시를 정리한 패턴의 집합이다.
🌠 데코레이터 패턴 - 개방 폐쇄 원칙(OCP), 의존 역전 원칙(DIP)
장식하다
라는 의미의 데코레이터 패턴은 프록시 패턴과 유사한 형태를 가지고 있지만
반환값을 가진다는 부분에서 차이점을 보인다.
프록시 패턴
- 제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다.
- 클라리런트가 받는 반환값을 특별한 경우가 아니면 변경하지 않는다.
데코레이터 패턴
- 클라이언트가 받는 반환값에 장식을 더한다.
데코레이터 패턴 - 적용 전
public interface IService {
public abstract String runSomething();
}
public class Service implements IService {
public String runSomething() {
return "서비스 짱!!!";
}
}
public class ClientWithNoDecolator {
public static void main(String[] args) {
Service service = new Service();
System.out.println(service.runSomething());
}
}
데코레이터 패턴 - 적용 후
public interface IService {
public abstract String runSomething();
}
public class Service implements IService {
public String runSomething() {
return "서비스 짱!!!";
}
}
public class Decoreator implements IService {
IService service;
public String runSomething() {
System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달");
service = new Service();
return "정말" + service.runSomething();
}
}
public class ClientWithDecolator {
public static void main(String[] args) {
IService decoreator = new Decoreator();
System.out.println(decoreator.runSomething());
}
}
🌠 정리
메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴
- 장식자는 실제 서비스와 같은 이름의 메서드를 구현하며 인터페이스를 사용한다.
- 장식자는 실제 서비스에 대한 참조 변수를 갖는다. (합성)
- 장식자는 실제 서비스의 값은 이름을 가진 메서드를 호출하고, 반환값에 상식을 더해 클라이언트에게 돌려준다.
- 장식자는 실체 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
데코레이터 패턴
은 프록시 패턴
과 같은 특성을 지니고 있어 개방 폐쇄 원칙
과 의존 역전 원칙
을 적용한 패턴이다.
🧾 Reference
반응형