1. DAO ( Data Access Object ) 

데이터베이스 Data에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다.

사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 Interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다. DAO는 데이터베이스 와 연결할 Connection까지 설정되어 있는 경우가 많다.

그래서 현재 쓰이는 Mybatis 등을 사용할 경우 커넥션 풀 까지 제공되고 있기 때문에 DAO를 별도로 ㅏㄴ드느 경우는 드물다.

 

2. DTO ( Data Transfer Object) 

VO라고도 표현하며 계층 간 데이터 교환을 위한 자바 빈즈(Java Beans)이다.

데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다. DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter , setter만 가지고 있다.

정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

 

 

# DTO 클래스 예제

public class personDTO {
	private String name;
    private in age;
    
    public String getName() {
    	return name;
	}

	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
  	}
    
    public void setAge(int age) {
    	this.age = age;
    }
}

 

위에 클래스를 보면 getter / setter 가 존재한다. 여기서 중요한 건 Property(프로퍼티) 개념인데 자바는 Property가 문법적으로 제공되지 않는다.

 

자바에서 Property라는 개념을 사용하기 위해 지켜야 하라 약속이 있다.

setter / getter 에서 set과 get 이후에 나오는 단어가 Property라고 약속하는 것이다.

위 클래스에서 프로퍼티는 name과 age이다.

중요한 것은 프로퍼티가 멤버 변수 name, age로 결정되는 것이 아닌 getter/setter에서 name과 age 임을 명심해야 한다.

즉 멤버 변수는 아무렇게 지어도 영향이 없고 getter / setter 로 프로퍼티 ( 데이터 ) 를 표현한다는 것이다.

 

자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법을 사용하는데 , 데이터 자동화 처리에서

제일 중요한 것은 표준 규격이다. 예를 들어 위 클래스 DTO에서 프로퍼티가 name, age라면 name, age의 키값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있다. 중요한 것은 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter가 실행된다는 점이다.

 

그래서 layer 간 ( 특히 서버 => 뷰로 이동 등) 에 데이터를 넘길 때 DTO를 쓰면 편하다는 것이 이런 이유 대문이다.

뷰에 있는 form에서 name 필드 값을 프로퍼티에 맞춰 넘겼을 때 받아야 하는 곳에서 일일이 처리하는 것이 아니라

name 속성의이름과 매칭되는 프로퍼티에 자동적으로 DTO가 인스턴스화되어 PersonDTO를 자료형으로 값을 받을 수 있다

 

3. VO(value Object)

VO는 DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 있다.

VO는 값 오프젝트로 값을 위해 쓰인다. 자바는 값 타입을 표현하기 위해 불변 클래스를 만들어 사용하는데,

불변이라는 것은 read only 특징을 가진다.

DTO와 VO의 공통점은 넣어진 데이터를 getter를 통해 사용하므로 주 목적은 같으나 DAO는 가변적인 성격을 가진 클래스이며(setter 활용) 그에 비해 VO는 불변의 성경을 가졌기에 차이점이 있다.

 

 

참조 : https://m.blog.naver.com/cjhol2107/221757079506

'Language > JAVA' 카테고리의 다른 글

자바(Java) 기초_제어문(Control statement)  (0) 2022.01.20

 

01.  제어문 

자바 인터프리터는 위에서 아래로

오른쪽에서 왼쪽으로 프로그램을 읽는다.

그런 프로그램의 흐름을 변경할 수 있는게 제어문이다.

 

- 제어구조 종류 3가지

① 순차처리 : 위에서 아래로 처리한다.

② 선택처리 :

     -조건분기 : if , if ~ else, swich

     -무조건 분기 : goto(자바에서는 사용할 수 없는 예약어)

③ 반복처리(Loop) : for, while, do~while

 

02.  선택처리 - 조건 분기

① 단일 if문

 - 형식 if (조건문) { 문장; } 문장;

 - 조건문의 결과가 true 이면 { }안에 문장을 수행한다. 

수행후 {} 바깥쪽 문장을 처리한다.

 

② if ~ else 문 

 - 형식

 if(조건문) 

 { 

    처리내용 1;

 } else

  {

    처리내용 2;

}

- 조건문의 결과가 true 이면 처리내용1을 처리 false이면 처리내용 2 처리

 

③ 다중 if ~ else문

 - 형식

 if(조건문1)

 {

    처리내용 1;

 }else if(조건문2)

 {

   처리내용 2;

 }else

{

  처리내용 3;

 } 

 - else if는 개수의 상관없이 생성가능

 

④swich-case 문

- 형식

switch(수식) // 수식결과는 정수형 or 문자형, 논리형 X

    case 값1:

       처리내용1;

       break; // case 를 빠져나오며 다음 case 문으로 계속 넘어간다.

    case 값2:

       처리내용2;

       break;

    default: //case문에서 일치하는 값이 없을 경우 수행 

       처리내용;

       break;

 

 

'Language > JAVA' 카테고리의 다른 글

[Java] DAO, DTO, VO 개념차이 정리  (0) 2023.03.27

+ Recent posts