DAO, DTO, VO 개념 및 차이

DAO (Data Access Object)

DAO는 Data Access Object의 약자로 실제로 데이터에 접근하는 객체를 말한다.
직접 DB에 접근하여 데이터의 삽입, 조회, 갱신, 삭제 등의 작업을 수행한다.

데이터베이스 처리를 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

public class MemberDaoImpl implements MemberDao {
  private DBUtil dbUtil = DBUtil.getInstance();
  private static MemberDao memberDao = new MemberDaoImpl();
  private MemberDaoImpl() {}
  public static MemberDao getMemberDao() {
    return memberDao;
  }

  @Override
  public void registerMember(MemberDto memberDto) throws SQLException {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = dbUtil.getConnection();
      StringBuilder registerMember = new StringBuilder();
      registerMember.append("insert into member (userid, username, userpwd, email, joindate) \n");
      registerMember.append("values (?, ?, ?, ?, now())");
      pstmt = conn.prepareStatement(registerMember.toString());
      pstmt.setString(1, memberDto.getUserId());
      pstmt.setString(2, memberDto.getUserName());
      pstmt.setString(3, memberDto.getUserPwd());
      pstmt.setString(4, memberDto.getEmail());
      pstmt.executeUpdate();
    } finally {
      dbUtil.close(pstmt, conn);
    }
  }
}

DTO (Data Transfer Object)

DTO는 Data Transfer Object의 약자로 데이터 교환을 위한 객체를 말한다.
DTO는 로직을 가지지 않는 데이터 객체이고, getter/setter 메소드만을 가지고 있다.

보통 DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용한다.

public class MemberDto {
  private String userName;
  private String userId;
  private String userPwd;
  private String email;
  private String joinDate;

  public String getUserName() {
    return userName;
  }
  public void setUserName(String userName) {
    this.userName = userName;
  }
  public String getUserId() {
    return userId;
  }
  public void setUserId(String userId) {
    this.userId = userId;
  }
  public String getUserPwd() {
    return userPwd;
  }
  public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public String getJoinDate() {
    return joinDate;
  }
  public void setJoinDate(String joinDate) {
    this.joinDate = joinDate;
  }
}

VO (Value Object)

VO는 값을 표현하기 위한 객체이다.
단순히 값을 표현하기 위해 사용하며 getter만 존재한다. (read-only 특성을 가짐)

VO는 DTO와 혼용되어 사용되기도 하는데 DTO는 인스턴스 개념이고, VO는 리터럴 값 개념이다.

Continue reading


© 2021. All rights reserved.

Powered by Hydejack v9.1.5