MVC ( Model - View -Controller )
사용자 인터페이스로, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴
- Model : 데이터와 관련된 부분 → 백그라운드에서 동작하는 비즈니스 로직 ( 데이터 ) 처리
- View : 사용자한테 보여지는 UI부분 → 정보를 화면으로 보여주는 역할
- Controller : Model과 View의 중개자 역할 → 사용자의 입력 처리와 전반적인 프로그램 흐름 제어
( 첫날 배웠던 개념에 이어서 )
- DAO ( Data Access Object ) : 데이터베이스의 data에 접근하기 위한 객체로, 데이터베이스에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용함
· 비즈니스 로직 ( Business Logic ) : 사용자의 눈에는 보이지 않지만, 사용자가 바른 결과물을 올바르게 도출할 수 있도록 짜여진 코드 로직을 말함
- DTO ( Data Transfer Object ) : 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체( Getter & Setter만 가진 클래스 )
→ 사용자가 입력한 데이터를 DB에 넣는 과정
① 사용자가 자신의 브라우저에 데이터를 입력 → form에 있는 데이터를 DTO에 넣어서 전송
② 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣음
- VO ( Value Object ) : 값 오브젝트로써 값을 위해 쓰임
· Read-Only 특징 : 사용하는 도중에 변경 불가능하며 오직 읽기만 가능
· DTO와 유사하지만 DTO는 Setter를 가지고 있어 값이 변경 가능
▷ MVC 패턴을 사용해야 하는 이유
- 비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행 가능
- Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리함
- 중복 코딩의 문제점 제거
멤버 관리 시스템 생성
앞으로 클래스를 역할별로 분리해서 생성하도록 하자
- 클래스 생성 : Member / MemberDAO / MemberApp
① Member 클래스 : 변수 선언, 생성자, 속성함수 ( Getter & Setter )
② MemberDAO 클래스 : DTO 객체를 관리하는 클래스로 데이터 값을 저장 및 읽어오는 역할
→ Member와 데이터베이스서버 사이에서 중계하는 역할 ( CRUD )
→ 아직 JDBC에 대해 배우지 않았으므로, 데이터베이스의 테이블 데이터 대신 배열을 활용하자.
③ MemberApp 클래스 : 실제 main( ) 메서드가 있는 클래스로, 실행 클래스에 해당
< ① Member 클래스 >
package mvc.mini;
public class Member {
// 1. 변수 선언
private String name;
private int age;
private String tel;
private String email;
private String addr;
private int weight;
// 2. 속성함수 ( Getter, Setter )
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
if ((age < 0) ||
(age > 150)) {
this.age = 0;
} else {
this.age = age;
}
}
public String getTel() {
return this.tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddr() {
return this.addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getWeight() {
return this.weight;
}
public void setWeight(int weight) {
// ** 1번째 방법
// if ((weight < 0) ||
// (weight > 200)) {
// this.weight = 50;
// } else {
// this.weight = weight;
// }
// ** 2번째 방법
if ((0 <= weight) &&
(weight <= 200)) {
this.weight = weight;
return;
}
this.weight = 50;
}
❶ 변수 선언 : 멤버변수를 private로 제한하고, 속성함수를 이용해 간접적으로 멤버변수의 값을 다룰 수 있도록 함
→ 속성함수 : public 메서드로, 직접 작성하거나 [ Source ] - [ Generate Getters and Setters... ] 클릭 → 멤버변수 선택 및 위치 선택하면 자동적으로 생성됨
❷ 변수의 데이터를 유효한 값으로 유지하기 위해서 set 메소드 내에서 if문을 이용하자
ex ) 나이를 -100으로 입력할 경우, 이 데이터는 유효하지 않은 값이므로 set 메서드에서 기본 default 값으로 처리하여 데이터의 무결성을 유지시킴
< ② MemberDAO 클래스 >
package mvc.mini;
public class MemberDAO {
Member[] members; // 데이터베이스의 테이블 역할
int currentIndex;
MemberDAO(int arraySize){
members = new Member[arraySize];
currentIndex = -1;
}
// - 메소드 오버로딩 -
// ① 회원정보 추가 - (1)
// 외부에서 객체 생성 후, 참조변수를 매개변수로 받는 경우
void insertMember(Member member) {
currentIndex++;
// members[currentIndex] = new Member();
members[currentIndex] = member;
}
// ① 회원정보 추가 - (2)
// 직접 개별 멤버데이터를 매개변수로 받는 경우
void insertMember(
String name,
int age,
String tel,
String email,
String addr,
int weight) {
Member newMember =
new Member(name, age, tel, email, addr, weight);
currentIndex++;
members[currentIndex] = newMember;
}
boolean testInsertMember(Member member) {
int count = members.length; // 현재 테이블의 레코드 수
insertMember(member);
int insertCount = members.length; // 추가된 자료 수
// members 배열의 길이만큼 자료가 추가됨
// 추가된 테이블의 자료수 - 이전 테이블 자료수 > 0
// 자료 추가됨
if (insertCount - count > 0) {
return true;
} else {
return false;
}
}
// ②-① 전체 회원정보 검색
void selectMemberAll() {
}
// ②-② 번호로 지정된 회원정보 검색
// 반환타입 : Member
Member selectMemberByIndex(int index) {
return members[index];
}
// ③ 회원정보 수정
void updateMember() {
}
// ④ 회원정보 삭제
void deleteMember() {
}
'백엔드 > JAVA' 카테고리의 다른 글
13일차 수업 기록 (0) | 2023.05.15 |
---|---|
객체 지향 프로그래밍 이론(4) (0) | 2023.05.12 |
객체 지향 프로그래밍 이론(3) 및 주사위 게임 예제 실습 (0) | 2023.05.09 |
접근제어자 및 객체 지향 프로그래밍 (2) (0) | 2023.05.08 |
콘솔창에 메뉴 만들기 예제 실습 및 이론 (0) | 2023.05.04 |