원지의 개발
article thumbnail
Published 2023. 6. 20. 13:51
[Spring] DAO, VO, DTO, Entity Server/Spring
728x90

출처: 뤼튼

DAO

  • Data Access Object
  • 데이터베이스의 data에 접근하기 위한 객체, 데이터베이스의 통신
  • 데이터베이스에 접근하기 위한 로직을 분리하기 위해 사용
  • Repository

DTO & VO

DTO

  • Data Transfer Object
  • Table
  • 계층 간 데이터 교환을 하기 위해 사용하는 객체
  • Entity 비슷하지만 목적 자체가 전달이므로 일회성으로 사용되는 성격이 강함
  • 로직을 가지지 않는 순수한 데이터 객체 - getter & setter만 가진 클래스 (setter 있으면 가변 객체)
  • DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바뀌어 오고 가는 것
  • setter의 경우 변조 가능성이 있으므로 생성자로 값을 넣어주면 변조 불가능하게 만듦 (불변 객체)
1. 유저가 자신의 브라우저에 데이터를 입력
2. form에 있는 데이터를 DTO에 넣어 전송
3. 해당 DTO를 받은 서버가 DAO(or VO)를 이용하여 데이터를 데이터베이스로 집어넣음
생성자가 없다면 자동으로 생성자를 만들고 객체를 만들어 호출
단, 매개변수가 있는 생성자를 만들면 default 생성자는 자동으로 만들어지지 않으므로,
객체 생성시 new 클래스명 (매개변수1, 매개변수2)로만 생성 가능
매개변수 없이 (new 클래스명() 이렇게) 객체 생성을 하고 싶다면 defalut생성자를 명시적으로 적어줘야 함

VO

  • Value Object
  • 값 자체를 표현 - getter만 존재
  • DTO와 유사하지만 read-Only 특징이 있음
  • 필드 값이 같으면 두 객체를 같다고

Entity

  • 실제 DB 테이블과 매핑이 되는 클래스
  • 데이터를 전달하는 클래스로 사용하면 X
  • DB의 테이블과 1:1로 매핑
Entity는 비즈니스 로직이 있고, 실제 데이터도 변경되기 때문에, Setter를 최대한 사용하지 않는 편이 좋음
반면에 DTO는 목적 자체가 어떤 로직이 있다기 보다는, 단순히 데이터를 전달하는 것이기 때문에 Getter, Setter를 자유롭게 사용
728x90
profile

원지의 개발

@원지다

250x250