대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -9일차 노트 필기_Private Consturctor, 싱글톤 클래스, MVC 구조_220728
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구조를 사용해야하는 이유 : 유지보수, 재사용을 높히고 생산성을 좋게 하기 위함.
: service와 repository는 보통 싱글톤 클래스 적용;
ClassDiagram
1) is a 관계
- 상속(extends)
- 구현(implements)
2) has a 관계
- 맴버필드로
- 지역변수로