Develop/Spring Boot

디자인 패턴

roalwh 2023. 11. 17. 18:19

프록시 패턴 (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