프록시 패턴 (Proxy Pattern)
- 객체를 직접적으로 참조 하는것이 아닌 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식
- 사이즈가 큰 객체가 로딩되기전 프록시를 통해 참조를 할 수 있음
- 로컬에 있지않고 떨어져있는 객체를 사용
- 실제 객체의 public, protected 메소드를 숨기고 인터페이스를 통해 노출
- 원래 객체에 접근에 대해 사전처리를 할 수 있음
- 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요할 때 성능이 저하될 수 있음
- 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되어야 하는 경우 성능이 저하될 수 있음
// Image.java
public interface Image {
//인터페이스 생성
public void displayImage();
}
// Real_Image.java
public class Real_Image implements Image {
private String fileName;
public Real_Image(String fileName) {
this.fileName = fileName;
}
private void loadFromDisk(String fileName) {
System.out.println("로딩: " + fileName);
}
@Override
public void displayImage() {
//7.화면에 출력
System.out.println("보여주기: " + fileName);
}
}
// Proxy_Image.java
public class Proxy_Image implements Image {
private String fileName;
private Real_Image realImage;
//3.전달 받은 파일이름 초기화
public Proxy_Image(String fileName) {
this.fileName = fileName;
}
@Override
public void displayImage() {
//5. 요청 시 원본 이름이 null 일때 fileName으로 진행
if (realImage == null) {
realImage = new Real_Image(fileName);
}
//6. realImage의 displayImage 호출
realImage.displayImage();
}
}
// Proxy_Pattern.java
public class Proxy_Pattern {
public static void main(String args[]) {
// 2. Proxy_Image("test1.jpg") 파일이름, Proxy_image 호출
Image image1 = new Proxy_Image("test1.jpg");
Image image2 = new Proxy_Image("test2.jpg");
//4.displayImage 호출
image1.displayImage();
image2.displayImage();
}
}
싱글톤 패턴 (Singleton Pattern)
객체의 인스턴스가 오직 1개만 생성되는 패턴
public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // 생성자는 외부에서 호출못하게 private 으로 지정해야 한다. } public static Singleton getInstance() { return instance; } public void say() { System.out.println("hi, there"); } }
한번의 선언을 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있음
싱글통으로 구현한 인스턴스는 '전역'이므로 다른 클래스의 인스턴스들이 데이터를 공유 가능한 장점
객체 지향 설계 원칙 중에 '개방-폐쇄 원칙' 것이 존재함,
싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지게 되는데, 개방-폐쇄 원칙이 위배됨
템플릿 메소드 패턴
팩토리 메소드 패턴
전략패턴
MVC 패턴
의존성 주입
프론트 컨트롤러
뷰 헬퍼
'Develop > Spring Boot' 카테고리의 다른 글
@PostConstruct (0) | 2023.12.07 |
---|---|
DisconnectableInputStream source reader 에러 (0) | 2023.11.23 |
[Spring boot] application.yml 설정 (0) | 2023.10.24 |
gitignore 파일 (0) | 2023.10.23 |
.gitignore 작성하기 (0) | 2023.10.23 |