- 회사의 웹 사이트가 사용자에게 많은 이미지를 보여줌.
- 그로 인하여 페이지의 로딩 시간이 길어져서 UX 가 저하됨.
- 프록시 패턴으로 이미지 로딩을 최적화 가능
구현
- 공통 인터페이스
public interface Image { void display(); }
- 실제 이미지 클래스
public class RealImage implements Image { private String fileName; public RealImage(String fileName) { this.fileName = fileName; this.loadFromDisk(); } private void loadFromDisk() { System.out.println("Loalding " + fileName); } @Override public void display() { System.out.println("Displaying " + fileName); } }
- 프록시 이미지 클래스
public class ProxyImage implements Image { private RealImage realImage; private String fileName; public ProxyImage(String fileName) { this.fileName = fileName; } @Override public void display() { if (realImage == null) { realImage = new RealImage(fileName); } realImage.display(); } }
- 클라이언트
public class ClientWithProxy { public static void main(String[] args) { Image proxyImage = new ProxyImage("image1.png"); // 이미지 로딩 X 파일 이름만 출력 proxyImage.display(); // 이미지 로딩후 show proxyImage.display(); } }
RealImage
클래스- 디스크에서 이미지를 로딩하여 보여주는 역할
ProxyImage
RealImage
의 프록시로서, 처음에는 이미지를 로딩하지 않음.
- 사용자가 이미지 요청 시 실제 이미지를 로딩하여 보여준다.
리소스의 절약
- 같은 이미지를 반복적으로 로딩하는 것은 불필요한 리소스의 소모를 유발함.
- 이미지를 한 번만 로딩하면 해당 리소스의 절약이 가능
레이지 로딩
- 이미지가 필요할 때만 로딩
- 초기 앱의 로딩 시간 줄일 수 있음.
유연성
- 실제 객체의 구현을 변경 X
- 프록시 클래스 + 공통 인터페이스만 추가한다면, 해당 패턴을 적용가능하다.
?
- 싱글톤 패턴과 유사한데, 이런식으로 별도 코드 변경없이, 중간에 별도 로직을 추가하기 위해서 사용하는 것. 이 전부인지
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[디자인패턴] 3가지 디자인 패턴의 분류 (0) | 2023.10.07 |
---|---|
[디자인패턴] 생성 패턴 - 팩토리 메서드 (0) | 2023.10.07 |
[6단원]디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2023.09.23 |
[6단원]디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern - 견본/회신 패턴) (0) | 2023.09.23 |
[6단원]디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2023.09.21 |