소프트웨어 설계과정에서 자주 발생하는 문제에 대한 설계 유형
반복되는 문제를 감소시켜 여러 개발자·협업 간에 관례적인 규칙을 정하고, 이를 통해 효율성을 높임
(1) 싱글톤 패턴
(2) MVC 패턴
... 그 외에도 다양
프로그램 내 단 1개·유일한 존재 객체(인스턴스)에 대한 선언
유일한 객체(인스턴스)를 만들고 이를 공유
여러 개의 객체가 존재하면 서로 다른 메모리를 사용하므로 협업·공유 시 제약이 발생
협업 간에서는 여러 개의 객체가 필요 없는, 유일한 객체인 경우 싱글톤을 사용
1) 지정한 클래스의 default 생성자를 private로 함
private 생성자명( ){ }
2) 지정한 클래스에 private static final으로 객체 선언
private static final 클래스명 변수명 = new 생성자명();
3) 지정한 클래스에 public static으로 getInstance 메소드를 선언
public static 클래스명 getInstance(){
return 변수명;
}
public class WaitingView {
// 0. 싱글톤 선언 =================================
// 0.1. 기본 생성자를 private화
private WaitingView() {
}
// 0.2. `private static final` instance 선언
private static final WaitingView waitingView = new WaitingView();
// 0.3. `public static` getInstance 메소드
public static WaitingView getInstance() {
return waitingView;
}
}
다른 클래스에서 선언된 싱글톤 호출
getInstance() 함수가 존재함getInstance()함수를 실행클래스명.getInstance();public class WaitingView {
// controller 싱글톤 호출
private WaitingController controller = WaitingController.getInstance();
}
주로 web/app 소프트웨어 개발 시 사용되는 디자인 패턴으로,
세가지 주요 역할을 분리하여 모듈화하는 방법
협업 간의 코드와 파일들을 MVC 패턴의 따라 구성하여 효율성 및 유지보수 편의성을 높임
유지보수, 모듈화, 단일기능 책임 등
분리에 따른 복잡도 증가
다양한 실무 프레임 워크에서 권장하는 패턴
ex) Spring etc.
데이터 관리 담당
① 주로 web/app 에서는 Java/Python/Node.js 등 back-end
② 데이터베이스와 상호작용
③ 주요 키워드
dto[] (배열) 또는 ArrayList<> (리스트 객체)을 만듦입출력 담당
① 주로 web/app 에서는 HTML/CSS/JS/JPS 등 front-end
② 사용자로부터 입력·출력이 실행
③ 일반적으로 console 기준으로 view 클래스에서만 print와 scan 함수를 사용
model과 view 사이의 제어/전달/유효성 검사 등을 담당
① 주로 web/app 에서는 Java/Python/Node.js 등 back-end
② view로부터 요청을 받아 model에게 전달하고, 처리 결과를 view에게 전달
③ 키워드
- MVC1 패턴 : controller + view (ex. JSP, 머스테치, 타임리프 etc)
- MVC2 패턴 : controller · view 분리
- MVC2 패턴 3 Tier : controller · service · view · model 분리 (ex. Spring)
view ---(DTO)---> controller ---(DTO)---> model(DAO)
view <---(DTO)--- controller <---(DTO)--- model(DAO)
※ view가 dao와 직접 통신하지 않도록 주의!!!
☆★☆★☆★디자인 패턴 내용은 다음에도 이어짐....☆★☆★☆★