1.싱글톤 패턴
- ① 싱글톤 패턴이란?
- 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고 (static)
그 메모리의 인스턴스를 만들어 사용하는 패턴
- 생성자가 여러차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환
- 생성자에 접근제어자를 private로 선언해서 객체의 생성을 제한하고 메서드를 통해서만 객체를 취득할 수 있도록 한다.
- ②싱글톤 패턴 장점
- 고정된 메모리 사용으로 new인스턴스를 사용하기 때문에 메모리 낭비를 막음
- static(전역)인스턴스이기 때문에 다른 클래스에서 데이터를 공유하기 쉬움
- ③ 싱글톤 패턴 단점
- 너무 많은 데이터를 공유할 경우 인스턴스들 간에 결합도가 높아져 수정이 어려워지고 테스트하기 어려워진다.
- 멀티쓰레드 환경에서 동기화처리를 하지 않으면 인스턴스가 두 개가 생성되는
경우 발생
- ④ 싱글톤 패턴 구현 방법
- private생성자
- static변수로 객체 생성
- 객체의 getter 구현
- ⑤ 싱글톤 패턴 예제
public class store{
private static Store instance = new Store();
private Store(){}
public static Store getInstance(){
return instance;
}
}
public class StoreTest{
Store store1 = Store.getInstance();
Store store2 = Store.getInstance();
System.out.println(store1);
System.out.println(store2);
}
- Store클래스 내에서 Store타입의 static변수 instance를 선언해서 객체를 생성 -> 이 객체는 static메모리 영역에 할당되어 어플리케이션 전체에서 이 객체만 유일하게 사용
- 생성자의 접근제어자를 private으로 했기 때문에 Store클래스 외부에서는 절대 호출 불가능
- 외부에서 사용할 수 있도록 Store객체를 반환하는 static getter를 만듦
- StoreTest클래스의 main메소드에서 Store인스턴스를 사용
=> new Store()와 같이 생성 불가능, Store의 getInstance()를 호출함으로써 Store인스턴스에 접근할 수 있다.
- store1, store2 를 찍어보면 해시코드 값이 동일함
=> 두변수는 같은 인스턴스를 참조하고 있다.
2.MVC패턴
- 객체지향프로그래밍에서 MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식 중 하나
- 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식
- Model, View, Controller의 약자로 User-View-Controller-Model-Controller-View User의 구조를 가지고 있다.
- 데이터베이스나 제어프로그램의 변경 없이 시각적인 부분만 수정하려면 view
데이터 처리부분만 수정 model, 프로그램간 연결과 제어를 수정하려면 Controller부분만 수정하면 되는 방식
- MVC장점
- 전형적인 어플리케이션 OOP구조 : 가장 단순하며 보편적으로 많이 사용텍스트
- 맡은 일에만 집중할 수 있음, 효율성 증가, 유지보수 편리, 애플리케이션의 확장성과 유연성 늘어남, 중복코딩의 문제점 사라짐
- 유저 인터페이스와 비지니스 로직 분리
- MVC단점
- View와 Model 사이의 의존성이 높다 -> 어플리케이션이 커질수록 복잡하고 유지보수 어려워짐
M(Model)
- 애플리케이션의 정보(데이터)를 처리하는 컴포넌트
- 처음 정의하는 상수, 초기화값, 변수등을 뜻함
- 데이터베이스에 연결하고 데이터를 추출하거나 저장,삭제,업데이트,변환 등의 작업을 수행하는 역할
V(View)
- View는 말그대로 화면에 표시되는 부분, 사용자가 보는 화면
C(Controller)
- 사용자가 Controller에 작업을 요청하면 Controller는 Model을 호출하여 데이터를 처리하고 Model이 데이터를 처리한 결과를 View에 보내고 이 결과를 사용자가 보게 된다는 것
- Model과 View를 이어주는 다리 역할, 모든 "이벤트"담당, 메인 로직을 담당
- Model과 View내의 클래스들 간 정보 교환하는데 사용