모델이란?
- 현실 세계에는 다양한 객체가 있고 그 객체들은 각각의 역할을 가지고 있다.
- 역할이 정해져있다는 의미로 객체를 설계할 때 모델을 만든다고 표현.
- 객체지향프로그래밍에선 클래스를 모델을 설계하는 도구라고 한다.
- 객체_Object(현실) = 클래스_class(프로그래밍적) = 모델_Model(소프트웨어 공학적)
클래스로 만들 수 있는 모델의 종류
- DTO, VO
- Data Transfer Object, Value Object
- 데이터를 하나로 묶어서 이동시킬 때 사용한다.
- DAO
- Data Access Object
- 데이터베이스에 데이터(VO, DTO)를 저장,수정 하거나 검색,삭제를 하기 위해서 만들어지는 모델
- CRUD 동작을 가지고있는 클래스, 비즈니스 로직을 처리하는 클래스
- CRUD : Create, Read, Update, Delete
잘 설계된 VO 클래스란?
객체지향프로그래밍에서 클래스는 객체를 모델링(설계) 하는 도구이다. 모델링은 설계를 하는 것인데 설계는잘해야한다.그러면 어떻게 설계해야 VO클래스를 잘 설계할 수 있을까?
- 정보 은닉(Information Hiding)
- setter, getter 메서드 만들기
- 생성자를 이용한 초기화
- toString()으로 객체 값 출력하기
- 정보은닉
- 다른 객체에게 자신의 정보를 숨기고(private) 동작, 기능(메서드) 만을 통해 접근을 허용하는 것
- 클래스 외부에서 특정 정보에 접근을 막는다는 의미
- 정보은닉된 데이터에 접근할 수 있는 방법으로 setter,getter와 생성자가 있다.

- setter, getter 메서드 만들기
- getter, setter를 통해서 직접 접근이 아닌 우회해서 접근할 수 있도록 한다.
- 어떠한 조건을 걸어서 터무니 없는 값을 넣지 못하도록 할 수 있다.

- 생성자를 이용한 초기화
- 생성자 메서드를 오버로딩(Overloading)해서 객체 생성과 동시에 초기화 가능

- toString()으로 객체 값 출력
- 인스턴스 변수는 메모리의 번지값을 저장하고 있기 때문에 출력해보면 번지값이 나옴.
- Object객체에 내장되어있는 toString()메서드를 재정의하여 객체가 가지고 있는 모든 값을 출력할 수 있다.

요약
- 모든 생태정보를 은닉하기(private)
- 디폴트 생성자 만들기
- 생성자 메서드를 오버로딩 하여 객체 초기화
- setter, getter 메서드 만들기
- toString() 메서드 만들기
public class PersonVO {
private String name;
private int age;
public PersonVO() {
// 초기화 없음
}
public PersonVO(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public void getAge() {
return this.age;
}
public String toString() {
return name + \t + age;
}
}