JAVA를 잡아라!...

JAVA - 12. 개발 패턴 : MVC ★★★ 본문

JAVA/JAVA_개념

JAVA - 12. 개발 패턴 : MVC ★★★

onivv 2023. 12. 11. 17:18

Test.java 파일 1개에서 코드를 관리하면

1) 다른 사람이 코드 작성중일 때 실행불가능

2) 다른 사람과의 동시간 형성(버전)관리가 불편함

==> 기능별로 나눠서 작업하면 어떨까?

 

프로그램 코딩을 M V C 파트로 분할하자!

Model

- 데이터와 관련된 작업을 처리하는 부분

- "나는 항상 정확한 값을 받았다." 를 전제

- ex) 코더가 아래 생각을 갖고 코딩

        - 회원 가입 할 때 생년월일에 -200000년도를 입력하는일은 없을거야~

        - 정확한 입력을 받았을 때 내가 어떻게 처리할까?

        - 정확한 입력을 받았을 때 CRUD를 구현할거야~ 

 

Model_DTO = 클래스 객체

- 자료형이 없어서 개발자가 직접만든 클래스 ex) Student 자료형...,

- 값을 들고다니는 자료형으로 value값을 여러개 갖고다님 (ex) 멤버변수(점수, 번호, 이름...,

- JAVA는 2개 이상의 값을 return할 수 없기 때문에, 여러개의 값을 들고다닐 목적으로 만든 클래스의 객체임!

- 외부에서 호출될 수 있으니 getter&setter가 있어야하고, toString도 @오버라이딩 해주기

 

Model_DAO = 클래스 객체

- DTO를 CRUD해주는 클래스

- JAVA에서 DB와 연결이 되는 부분을 담당하는 클래스의 객체!

- JAVA단에서 DB역할을 해줌...ex) ArrayList...

- ArrayList<DTO> : DAO의 멤버변수니까 private을 붙이고,

                               단독으로 호출되지 않아 getter&setter없음! 초기화는 해주기

- CUD : output이 boolean형 (보통 메소드명 insert, update, delete로 고정되어 있음)

- R1R2 : 전체출력(2개 이상), 하나출력

               ---> model에서 R은 데이터(배열주소)  반환이 목적임!

               ---> 그 데이터를 View한테 줘서 View가 예쁘게 출력을 담당!

 

View

- 사용자와 관련된 작업을 처리하는 부분

- "세상에 정상적인 사용자는 없다."를 전제

- 사용자의 모든 입력 값에 대해서 검사 == 유효성 검사

- 올바른 값을 정제해서 Model에 보내줌

- 사용자에게 친절한 프로그램이 될수있도록 고민하는 역할

- 사용자에게 친절한 태도 == 사용자 편의성 UI/UX

- ex) 코더가 아래 생각을 갖고 코딩

        - 세상에 정상적인 사용자는 없을거야...

        - 왜 쓰라는데로 안쓸까...?

        - 서버 문제로 화면에 안뜨네...사용자에게 문제있다고 안내문 보내야지!

 

- 사용자에게 받은 입력값Controller에게 보내줘야해서 반환이 있어야함

- 하지만 입력을 하지않는, 출력만하는 메소드는 반환이 없음 (단, 출력이니까 성공/실패여부도 보여주기)

- View하나당 Scanner하나만 있으면되서 static(공유자원,전역변수)는 무거움...

   ---> 따라서 private을붙여서 멤버변수에 추가해주고, 생성자에서 초기화를 해줌

 

 

Controller ☆

- Model - View 이어주는 역할

- Model과 View는 절대로 직접 결합되어서는 안됨!

- 반드시 Controller를 통해서만 결합될 수 있음!

- private붙여서 View, DAO를 멤버변수에 두지만 단독으로 사용할일이 없어 getter&setter 형성 X, 단 초기화는 필요

 

 

 

++

하나의 프로그램에서

Model, View, Controller 객체각각 1개씩만 사용

ex) Scanner가 static일 필요 없음! > 싱글톤 패턴 유지 가능

 

++

ex) update < 점수변경, 이름변경
점수변경에서 추가로 이름도 변경하고 싶을 때....

update() 메소드 오버로딩으로 해결하면,
기능변경시 실수가 자주 발생! 현업에서 사용 X
기능 변경시 메소드를 오버로딩해서 여러개를 작성하면 "코드 응집도가 낮아짐" 

코드에 변경사항이 발생했을 때, 함께 바꿔야하는 코드가 많으면 "코드 결합도가 높아짐"
그래서 update()가 있는 Model을 변경하면 Controller도 변경해야함!
==> 기능 변경시 "유지보수에 불리한 코드"

 


좋은 코드란?
"유지보수가 용이한 코드"
1) 높은 응집도 : 하나의 기능은 하나의 메소드에서 사용(구현)!
2) 낮은 결합도 : DAO의 메소드 시그니쳐 인자값을 DTO로 고정
                          클래스의 객체를 가져오는거라 필드에 있는 모든 멤버변수를 가져올 수 있음