일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 소프트웨어의 품격
- 스프링 포매터
- 토비의 스프링
- Atomicity
- 스프링부트 도커
- fetch join
- ioc컨테이너
- java predicate
- jpa lazy
- Spring
- open-session-in-view
- kotlin ::
- IOC
- method refetence
- 기능적 요구사항
- spring formatter
- 스프링di
- 스프링 시큐리티 설정
- 생성자주입
- 정적팩토리메서드
- kotlin 리팩터링
- 그래프큐엘
- 자바 필터
- 수정자주입
- 비기능적 요구사항
- 스프링
- jpa no session
- 도커 이미지 빌드
- 스프링시큐리티
- 동적파라미터
Archives
- Today
- Total
공부기록
[JAVA] 프록시 패턴에 대해 알아보자 본문
반응형
개요
핵심 로직을 건들지 않고, 부가적인 작업을 수행할 때 주로 사용되는 패턴이다.
예를 들어 Event
가 생성될 때, 만들어진 시간을 콘솔에 기록하고 싶어졌다!
여기서 핵심 로직은 Event
를 생성하는 로직, 부가적인 로직은 만들어진 시간을 콘솔에 기록하는 코드다.
사용방법은 이렇다.
- 핵심로직을 수행하는 클래스와 부가적인 로직을 수행하는 클래스(프록시) 모두 같은 인터페이스를 참조하게끔한다.
- 클라이언트 코드에선 해당 인터페이스 타입을 사용하되, 실제 타입은 프록시 객체로 만든다.
- 프록시객체는 부가적인 로직을 수행한 뒤, 자신이 참조하고있는 핵심로직을 수행하는 객체를 사용한다.
구현
도메인 객체
public class Event {
private String name;
...constructor..getter..toString...
}
부가적인 로직을 수행하는 프록시와, 핵심 로직을 수행하는 서브젝트 모두가 구현하고 있는 인터페이스.
public interface EventService {
void createEvent(Event event);
}
부가적인 로직을 수행하는 프록시
public class EventServiceProxy implements EventService{
private EventService eventService;
public EventServiceProxy(EventService eventService) {
this.eventService = eventService;
}
@Override
public void createEvent(Event event) {
System.out.println("만들어진 시간 : " + LocalDateTime.now());
eventService.createEvent(event);
}
}
핵심 로직을 수행하는 서브젝트
public class EventServiceImpl implements EventService{
@Override
public void createEvent(Event event) {
System.out.println("이벤트가 만들어졌습니다 : " + event);
}
}
클라이언트
class EventServiceTest {
@Test
void proxy() {
EventService eventService = new EventServiceProxy(new EventServiceImpl());
eventService.createEvent(new Event("hmmmmmmmmteresting"));
}
}
콘솔에 기록되는 내용
만들어진 시간 : 2020-06-24T01:33:04.665159
이벤트가 만들어졌습니다 : Event{eventName='hmmmmmmmmteresting'}
레퍼런스
https://www.inflearn.com/course/the-java-code-manipulation/dashboard
반응형
'JAVA' 카테고리의 다른 글
코드의 점진적인 발진으로 동적파라미터를 이해해보자 (1) | 2020.03.20 |
---|---|
아이템24. 멤버클래스는 되도록 static으로 만들라. (0) | 2019.12.17 |
아이템 17. 변경가능성을 최소화하라. (0) | 2019.12.11 |
아이템15. 클래스와 멤버의 접근권한을 최소화하라. (0) | 2019.12.01 |
아이템12. toString을 항상 재정의하라 (0) | 2019.12.01 |