Joslynn의 하루

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -9일차 노트 필기_Private Consturctor, 싱글톤 클래스, MVC 구조_220728 본문

MSA Full-Stack 개발자 양성과정/Java

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -9일차 노트 필기_Private Consturctor, 싱글톤 클래스, MVC 구조_220728

Joslynn 2022. 7. 28. 17:40

private 생성자

class Test{

	private Test(){} // constructor
    
    // 중요!! 내부 안에서 자신을 생성해서 리턴해주는 메소드를 제공
    
    public static Test getInstance(){ // static 필수
    	Test t = new Test();
        return t;
    }
    
    // Test 객체를 생성해서 리턴
    // instance: 객체화 된다는 뜻에서 객체 생성 역할을 하는 메소드명으로 주로 사용 

}

-------------------------------

new Test(); // 외부 생성 불가
	Test t = Test.getInstance();
    t. 속성;
    t.method이름();
    
    Test t1 = Test.getInstance();
    Test t2 = Test.getInstance();
    Test t3 = Test.getInstance();
    // static 메소드에서 형성된 세 개의 서로 다른 Test 객체

: 외부에서 직접 객체 생성을 막음 // 생성자가 외부에서 접근이 불가능하기 때문에;

: 사용자가 임의대로 만들어 사용하지 못하게 함

: 내부 안에서 자신을 생성해서 리턴해주는 메소드를 제공

: 위 예제에서는 private 생성자를 가지고 있는 객체이므로 메소드를 통해 객체 Test를 가져온다. 

: 해당 메소드는 private 생성자를 가진 객체 내부에 있으므로 객체 생성이 불가능한 상황이다; 즉 호출이 용이하게 하려면 ** static 필수 **

 


 

private 생성자의 효용

: 사용자가 직접 객체를 생성해서 마음대로 쓰지 못하도록 막는다; 다만 내부적으로 직접 객체를 리턴

: 임의대로 해석하지 못하도록 함

: 주로 사용하는 사례는 **싱글톤 클래스**를 만들 때 많이 사용; 객체가 100번 만들어져도 같은 주소를 공유하고 있는 객체

: 싱글톤을 만들려면 private 생성자 필요

 

싱글톤 클래스

예제 1)

 

class Test{
	private static Test t = new Test(); 
    /*  **중요 포인트** static: static 메소드가 접근할 수 있도록 함
    private으로 객체 생성 은닉
    */

	private Test(){} // constructor
    
    public static Test getInstance(){ // static 필수
    	
        return t;
    }
    
  
-------------------------------

new Test(); // 외부 생성 불가
	Test t = Test.getInstance();
    t. 속성;
    t.method이름();
    
    Test t1 = Test.getInstance();
    Test t2 = Test.getInstance();
    Test t3 = Test.getInstance();
   
  // t1, t2, t3가 모두 같은 객체;

: 비지니스 로직, DB 연결 등의 객체 == 많은 객체가 필요없음 for 메모리 공간 관리;

 

 

싱글톤 클래스 생성 방법

1) private 생성자를 만든다.

2) static 메소드를 제공한다. (직접 객체 생성 및 리턴);

3) 맴버필드에 static으로 자기 자신을 생성해서 저장;  // 메소드를 여러번 호출 

 

// framework 등에서 주로 사용;

 


 MVC구조

: 용이한 유지보수를 위해 개발에도 디자인 패턴 적용; 

: 다양한 디자인 패턴 중 하나인 MVC (Model, View, Controller로 구분)


   - Model : Service영역(Business Logic : 알고리즘구현)

     DAO(Data Access Object) - DB연동부분
     DTO(Data Transfer Object ) = VO(Value Object)

// Back-end 분야


   -View : GUI구현(화면구성) // Java - Console; 사용자와 직접 대면하는 부분; 

 

   -Controller

:Model과 View 사이에서 중간자 역할.

: 사용자 요청이 들어오면 그 요청에 해당하는 Service -> DAO 등을 호출해주고 그 결과를 받아 결과에 해당하는 View쪽을 호출해준다.

// View와 Back 단을 직접 연결하지 않음; 중간에 제어해주는 Controller;

// 규모가 큰 프로젝트에서 유지보수 및 코드 재사용을 위해서 반드시 필요;

 -MVC구조를 사용해야하는 이유 : 유지보수, 재사용을 높히고 생산성을 좋게 하기 위함.

 

출처: https://junhyunny.github.io/information/design-pattern/mvc-pattern/

: service와 repository는 보통 싱글톤 클래스 적용;

ClassDiagram

ClassDiagram

1) is a 관계

    - 상속(extends)

    - 구현(implements)

 

2) has a 관계

    - 맴버필드로

    - 지역변수로

Comments