[Spring] DAO, DTO, VO

8786 단어 SpringSpring

DAO(Data Access Object)

  • DB의 데이터에 접근하기 위한 객체
    Persistence Layer(DB에 데이터를 CRUD하는 계층)
  • DB 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용
  • DB와 연결한 Connection까지 설정되어 있는 경우가 많음
  • MyBatis등을 사용할 경우 커넥션 풀까지 제공 → DAO를 별도로 만드는 경우 드물다.
public class TestDao {

 public void add(TestDTO dto) throws ClassNotFoundException, SQLException{
  Class.forName("com.mysql.jdbc.Driver");
  
  Connection conn= DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");
  
  PreparedStatement pstmt = conn.prepareStatement("insert into users(id,name,password) value(?,?,?)");
  
  pstmt.setString(1,  dto.getId());
  pstmt.setInt(2,  dto.getName());
  pstmt.setString(3,  dto.getPwd());
  
  pstmt.executeUpdate();
  
  pstmt.close();
  conn.close();
 }
}

DTO (Data Transfer Object)

  • 계층 간 데이터 교환을 위한 자바 Beans
    (여기서 계층은 Controller, View, Business Layer, Persistence Layer)
  • DB 레코드의 데이터를 매핑하기 위한 데이터 객체
  • DB 데이터를 Controller, Service로 보낼 때 사용
  • 로직 갖고 있지 않음 - 순수한 데이터 객체
  • 데이터와 Getter, Setter 존재
    (추가적으로 toString(), equals() 등 Object 메서드 작성 가능)
public class TestDTO {
 
 private String id;
 
 private String name;
 
 private String pwd;
 
 public String getId() {
  return id;
 }

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

 public String getName() {
  return name;
 }

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

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

Property

  • Getter와 Setter에서 Get, Set 이후에 나오는 단어가 Property라고 약속
  • Property는 위에서 id, name, pwd
  • Property는 멤버변수로 결정되는 것이 아니라 getter setter에서 나온 id, name, pwd로 결정
  • 자바는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법 사용하고 데이터 자동화 처리에서 가장 중요한 것은 표준 규격!
    (자바 리플렉션? 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API)
  • id, name, pwd가 키 값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있음
  • 우리가 setter를 요청하는 것이 아닌 프레임워크 내부에서 setter 실행

VO (Value Object)

  • DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 존재
    (DTO와 VO 모두 Getter를 통해 사용)
  • 데이터 그 자체로 의미 있는 것을 담고 있는 객체
  • 불변 클래스(Read Only 속성 객체)

VO는 특정한 비즈니스 값을 담는 객체이고, DTO는 Layer간의 통신 용도로 오고가는 객체

좋은 웹페이지 즐겨찾기