<소프트웨어 디자인 설계 패턴>
패턴이란 중복이 있는것! 안방벽지에 꽃패턴을 넣자 이랬으면 꽃이 하나? 여러개? 여러개가 먼저 떠올리게 될것입니다.
패턴은 개발자들끼리의 약속 어딜가도 같은 패턴이면 개발속도 올라가고 필요없는 시간이 준다.
이렇게 효율적으로 개발하기위해 디자인 패턴
<MVC 패턴>
※ 자바에서는 할수 없는 패턴이지만 굳이 보려면 main을 뷰단으로 생각해보자!
M(Model) : DB에서 조회된 결과 값을 담기 위한 변수들이 선언된 클래스
- Model -> 값을 받을 준비, 클래스로 만든다. 모델 하나당 1명의 정보 (1)
- 클래스명 뒤에 VO, DTO라는 문자를 붙여준다.
- VO (Value Object)
- DTO (Data Transfer Object)
V(View) : 사용자에게 보여질 화면을 구성하는 부분
- View -> 화면 (컨트롤러의 메소드를 사용), 뷰단에서 객체화
- Controller에 선언된 메소드를 사용하는 부분
C(Controller) : DB에 접근할 수 있는 메소드들이 선언된 클래스
- Controller -> 수정요청 => CRUD의 기능을 담당하는 메소드를 만들기(2)
- 접근 후 결과 값이 있을 경우 Vodel 객체에 담은 후 처리
- 클래스명 뒤에 DAO라는 문자를 붙여준다.
- DAO(Data Access Object)
=> Controller에서 Model 을 쓰는것!
=> 하나를 3가지로 분리하자! => 분업을 위한 분리 -> 최소 3명이 개발할수 있고, 가독성이 늘어남
=> 이를 적용하기 위해서는 외부 저장소를 알아야한다.
<싱글톤 패턴>
어떤 클래스가 최초 한번만 메모리를 할당하고(Static), 그 메모리에 객체를 만들어 사용하는 디자인 패턴입니다.
생성자 호출이 반복되어도 실제로 생성되는 객체는 처음에 생성한 static객체를 반환해주는 것입니다.
★Point! 자바에서는 생성자를 private로 선언해서 생성 불가하게 하고, getInstance()라는 메소드를 이용하여 객체를 받아내어 객체에 접근합니다.
// 제과점에서 빵을 만들고 빵을 먹는 클래스를 만들고 싱글턴패턴으로 getInstance()를 사용하면
// static으로 선언된 이 객체를 리턴해줍니다.
package bakery;
// 싱글턴 패턴
// 어느객체에서도 하나의 객체만 사용해야함
public class BreadPlate {
private static BreadPlate plate;
public int breadCnt;
public int eatCnt;
private BreadPlate() {;};
public static BreadPlate getInstance() {
if(plate == null) {
plate = new BreadPlate();
}
return plate;
}
//빵만들기
public synchronized void makeBread() {
if(breadCnt > 9) {
System.out.println("빵이 가득 찼습니다.");
try {wait();} catch (InterruptedException e) {;}
}
breadCnt++;
System.out.println("빵을 1개 만들었습니다. 총 :" + breadCnt + "개");
}
//빵먹기
public synchronized void eatBread() {
if(eatCnt == 20) {
System.out.println("빵이 다 떨어졌습니다.");
}else if(breadCnt < 1) {
System.out.println("🥐🥯🍪🍪🍩🍩🍩🥖 빵을 만들고있어요 !");
}else {
breadCnt--;
eatCnt++;
System.out.println("빵을 1개 먹었습니다. 총 :" + breadCnt + "개");
notify();
}
}
}
// 스레드를 사용하여 빵만들기 시작할때 빵만드는 객체는 하나만 있어야 하기 때문에
// 싱글톤으로 만든 빵만드는 기능을 하나만 작동시켜 동작시킨다.
package bakery;
public class BreadMaker implements Runnable {
프로그램 종료시 빵제작도 멈추기 위함
private boolean exit;
public boolean isExit() {
return exit;
}
public void setExit(boolean exit) {
this.exit = exit;
}
@Override
public void run() {
try {
for (int i = 0; i < 20; i++) {
if (exit) {
break;
}
System.out.println(Thread.interrupted());
if (Thread.interrupted()) {
break;
}
BreadPlate.getInstance().makeBread();
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("BreadMaker Thread 종료");
}
}
}
'프로그래밍 공부 > Java' 카테고리의 다른 글
[Lesson] list만 순서가 있다고? Map도 순서가 있다! (0) | 2023.01.10 |
---|---|
[lesson] Java 프로그래밍 언어 - JDBC (0) | 2021.08.22 |
[lesson] Java 프로그래밍 언어 - 파일 입출력 (0) | 2021.08.11 |
[lesson] Java 프로그래밍 언어 - 스레드(Thread) (0) | 2021.08.07 |
[lesson] Java 프로그래밍 언어 - Collection (0) | 2021.08.04 |