DAO/DTO/VO

김경태·2022년 9월 20일

Java 기초

목록 보기
6/7

DAO(Data Access Object)

데이터베이스의 data에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.
사용자는 자신이 필요한 interface를 DAO에게 던지고 DAO는 이 interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다.
DAO는 데이터베이스와 연결할 Connection까지 설정되어 있는 경우가 많다.
그래서 현재 쓰이는 MyBatis 등을 사용할 경우 커넥션풀까지 제공되고 있기 때문에 DAO를 별도로 만드는 경우는 드물다.

DTO(Data Transfer Object)

VO라고도 표현하며 계층 간 데이터 교환을 위한 자바 빈즈(Java Beans)이다.
데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다. DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter, setter만 가지고 있다.
정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.

Property

자바는 property가 문법적으로 제공되지 않는다.
자바에서는 property라는 개념을 사용하기 위해 지켜야 할 약속이 있다.
setter/getter에서 set과 get 이후에 나오는 단어가 property라고 약속하는 것이다.

public class PersonDTO {
	private String name;
    
    public String getName() {
    	return name;
    }
}

그래서 위 클래스에서 프로퍼티는 name이다.
중요한 것은 프로퍼티가 멤버 변수 name으로 결정되는 것이 아닌 getter/setter 에서의 name이다.
즉 멤버 변수는 아무렇게 지어도 영향이 없고 getter/setter로 프로퍼티(데이터)를 표현하는 것이다.

VO(Value Object)

VO는 DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 있다.
VO는 값 오브젝트로써 값을 위해 쓰인다. 자바는 값 타입을 표현하기 위해 불변 클래스를 만들어 사용하는데, 불변이라는 것은 read only 특징을 가진다.
DTO와 VO의 공통점으 넣어진 데이터를 getter를 통해 사용하므로 주 목적은 같으나 DAO는 가변적인 성격을 가진 클래스이며(setter 활용) 그에 반해 VO는 불변의 성격을 가졌기에 차이점이 있다.

https://m.blog.naver.com/cjhol2107

profile
잊지 않기 위해 기록

0개의 댓글