이번에는 DAO와 DTO, VO 그리고 Entity에 대해서 알아보려고한다.
개발을 하다보면 DB를 거의 사용해야하다보니까 생각보다 많이 들어보게 되는 주제이다.
실제로 옛날에 개발을 해보긴 했는데 잘 기억은 안나기도 하고, 이번 기회에 자세히 알아보도록 하자.
먼저 DAO에 대해서 알아보도록 하자.
DAO(Data Access Object, 데이터 접근 객체)
DAO는 말 그대로 데이터에 접근하기 위해서 만들어지 객체를 말하는데, 주로 비즈니스 로직과 데이터 접근 로직을 분리하기 위해서 주로 쓰인다.
DB에 접근하기 위해서는 연결을 해야하는데, 이러한 연결은 한 두번만 일어나는 것도 아니고 여러 번 일어날 수 있다.
비즈니스 로직에서 많은 연결과 로직을 다 처리하기엔 무리가 있으므로 DB에 접근하는 객체인 DAO를 만들어두고 그 객체를 호출해서 사용하도록 해서 데이터에 접근하거나 조작하는 일들을 전담하기 위해 만들어진 객체가 DAO이다.
DAO 예제
public class Dao {
public void add(Dto dto) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "1234");
PreparedStatement preparedStatement =
connection.prepareStatement("insert into users(name) value(?)");
preparedStatement.setString(1, dto.getName());
preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();
}
}
보통 이런 식으로 연결과 DB에 대한 조작하는 객체이다.
요즘에는 커넥션 풀을 설정파일에 적용하는 경우가 많기에 많이 사용되지는 않는다.
DTO(Data Transfer Object, 데이터 전송 객체)
DTO는 데이터 전송 객체이다.
주로 계층간( Service, Repository, Controller 등 )의 데이터 교환을 위해 사용된다.
처음에는 Entity(테이블에 대응되는 하나의 클래스)를 만들어 사용하면 되지 않나? 라고 생각을 했었는데,
각각의 역할이 있기 때문에 분리를 해주는 것이 좋다.
Entity 는 자체가 테이블이라고 봐도 무방하므로 테이블 객체로서 DAO를 통해 DB와 연결되는데 쓰이는 것이고,
DTO는 이를 통해 가져온 데이터를 Service나 Controller 단으로 옮기는 역할을 한다.
그렇기에 DTO는 Getter/Setter 메서드 만을 가질 수 있고, 이외의 비즈니스 로직을 포함해서는 안된다.
public class Dto {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
DTO 같은 경우에는 많이 사용되고 중요하니까 확실히 알아두도록 하자.
VO(Value Objcet)
VO는 뜻 그대로 값을 담는 객체이다.
VO도 Getter/Setter를 가질 수 있고 전송 객체로 사용되지만,
equals(), hashcode()와 같은 메서드를 오버라이딩 하여 사용된다.
이는 중요한 데이터를 전달할 때 보통 사용되기에,
보통 일반적인 데이터를 다룰 때는 DTO를 사용하면 된다.
class VO{
private String name;
@Override
public boolean equals(Object o) {}
@Override
public int hashCode() {}
}
Entity
마지막으로는 Entity에 대해서 알아보자.
Entity는 DTO 부분에서 살짝 설명이 된 것 처럼 DB 테이블과 1:1로 매핑이 되는 Class이다.
실제 DB 필드와 같은 값으로 매핑을 해주어야만 한다.
DB와 가장 연관되어있는 객체이니 만큼 외부에서 최대한 접근하지 못하게 제한하여 객체의 일관성을 유지해야한다.
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Table(name = "member")
public class Memeber {
@Id @Column(name = "ID")
private int Id;
}
이렇게 평소에 많이 접해볼 수 있었던 DAO와 DTO, VO 그리고 Entity 에 대해서 알아보았다.
사실 이번 글은 수정을 한 번 거치게 되었다.
DAO, DTO 그리고 VO에 대해서만 정리를 해두었는데,
조금 이상한 부분과 Entity에 대한 내용이 필요할 것 같아서 VO와 Entity에 대해서 더 알아보고 해당 내용을 추가했다.
이전에는 이해하였다고 생각하였지만 그렇지 않았던 것 같다.
계속 공부하면서 위와 같은 내용들을 활용해볼 수 있었고 그로인해 좀 더 이해할 수 있도록 된 것 같다.
참고 -
https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0
'오늘의 공부 > CS' 카테고리의 다른 글
Port 에 대해서 (0) | 2022.03.20 |
---|---|
IP, TCP, UDP (0) | 2022.03.20 |
API에 대해서 (0) | 2022.03.20 |
이번에는 DAO와 DTO, VO 그리고 Entity에 대해서 알아보려고한다.
개발을 하다보면 DB를 거의 사용해야하다보니까 생각보다 많이 들어보게 되는 주제이다.
실제로 옛날에 개발을 해보긴 했는데 잘 기억은 안나기도 하고, 이번 기회에 자세히 알아보도록 하자.
먼저 DAO에 대해서 알아보도록 하자.
DAO(Data Access Object, 데이터 접근 객체)
DAO는 말 그대로 데이터에 접근하기 위해서 만들어지 객체를 말하는데, 주로 비즈니스 로직과 데이터 접근 로직을 분리하기 위해서 주로 쓰인다.
DB에 접근하기 위해서는 연결을 해야하는데, 이러한 연결은 한 두번만 일어나는 것도 아니고 여러 번 일어날 수 있다.
비즈니스 로직에서 많은 연결과 로직을 다 처리하기엔 무리가 있으므로 DB에 접근하는 객체인 DAO를 만들어두고 그 객체를 호출해서 사용하도록 해서 데이터에 접근하거나 조작하는 일들을 전담하기 위해 만들어진 객체가 DAO이다.
DAO 예제
public class Dao {
public void add(Dto dto) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "1234");
PreparedStatement preparedStatement =
connection.prepareStatement("insert into users(name) value(?)");
preparedStatement.setString(1, dto.getName());
preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();
}
}
보통 이런 식으로 연결과 DB에 대한 조작하는 객체이다.
요즘에는 커넥션 풀을 설정파일에 적용하는 경우가 많기에 많이 사용되지는 않는다.
DTO(Data Transfer Object, 데이터 전송 객체)
DTO는 데이터 전송 객체이다.
주로 계층간( Service, Repository, Controller 등 )의 데이터 교환을 위해 사용된다.
처음에는 Entity(테이블에 대응되는 하나의 클래스)를 만들어 사용하면 되지 않나? 라고 생각을 했었는데,
각각의 역할이 있기 때문에 분리를 해주는 것이 좋다.
Entity 는 자체가 테이블이라고 봐도 무방하므로 테이블 객체로서 DAO를 통해 DB와 연결되는데 쓰이는 것이고,
DTO는 이를 통해 가져온 데이터를 Service나 Controller 단으로 옮기는 역할을 한다.
그렇기에 DTO는 Getter/Setter 메서드 만을 가질 수 있고, 이외의 비즈니스 로직을 포함해서는 안된다.
public class Dto {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
DTO 같은 경우에는 많이 사용되고 중요하니까 확실히 알아두도록 하자.
VO(Value Objcet)
VO는 뜻 그대로 값을 담는 객체이다.
VO도 Getter/Setter를 가질 수 있고 전송 객체로 사용되지만,
equals(), hashcode()와 같은 메서드를 오버라이딩 하여 사용된다.
이는 중요한 데이터를 전달할 때 보통 사용되기에,
보통 일반적인 데이터를 다룰 때는 DTO를 사용하면 된다.
class VO{
private String name;
@Override
public boolean equals(Object o) {}
@Override
public int hashCode() {}
}
Entity
마지막으로는 Entity에 대해서 알아보자.
Entity는 DTO 부분에서 살짝 설명이 된 것 처럼 DB 테이블과 1:1로 매핑이 되는 Class이다.
실제 DB 필드와 같은 값으로 매핑을 해주어야만 한다.
DB와 가장 연관되어있는 객체이니 만큼 외부에서 최대한 접근하지 못하게 제한하여 객체의 일관성을 유지해야한다.
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Table(name = "member")
public class Memeber {
@Id @Column(name = "ID")
private int Id;
}
이렇게 평소에 많이 접해볼 수 있었던 DAO와 DTO, VO 그리고 Entity 에 대해서 알아보았다.
사실 이번 글은 수정을 한 번 거치게 되었다.
DAO, DTO 그리고 VO에 대해서만 정리를 해두었는데,
조금 이상한 부분과 Entity에 대한 내용이 필요할 것 같아서 VO와 Entity에 대해서 더 알아보고 해당 내용을 추가했다.
이전에는 이해하였다고 생각하였지만 그렇지 않았던 것 같다.
계속 공부하면서 위와 같은 내용들을 활용해볼 수 있었고 그로인해 좀 더 이해할 수 있도록 된 것 같다.
참고 -
https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0
'오늘의 공부 > CS' 카테고리의 다른 글
Port 에 대해서 (0) | 2022.03.20 |
---|---|
IP, TCP, UDP (0) | 2022.03.20 |
API에 대해서 (0) | 2022.03.20 |