면접을 볼 때 면접관이 VO가 뭐냐고 물었었다.
분명 Value Object로 값을 저장하는 객체라는 건 알고 있었는데 하도 공부를 안하니 어떻게 설명해야 될지도 모르고 기억도 안나서 망했다...
그리고 추가타로 DTO는 뭐냐고 질문이 들어온 상황... 당연히 면접은 떨어지고 이것들이 계속 머리에 멤돌기 시작했다. 개념을 확실하게 잡고 가야겠다.
Data Transfer Object의 약자이다. 계층간 데이터 교환을 위한 자바 빈즈를 의미한다. 계층은 Controller, View 등이다.
getter, setter 메서드 외에 따로 로직은 가지지 않는 순수한 데이터 객체이다.
코드를 살펴보면 이렇게 되어있다.
public class PersonDTO {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
이렇게 보니 평소에 데이터 전송용으로 자주 쓰던 자비 빈즈였다.
Value Object의 약자이다. 위의 DTO와 비슷한 개념이라고 하는데 약간의 차이가 있다고 한다. 바로 ReadOnly라는 것. getter 메서드만이 존재하기에 중간에 값을 수정할 수 없고 생성시에 새로 만들어야 한다.
코드를 보면 이렇게 생겼다.
public class StreetAddress
{
public StreetAddress(string street, string city) {
Street = street;
City = city;
}
public string Street {
get;
}
public string City {
get;
}
}
생성자로만 데이터를 정의할 수 있게 되었다. 개인적으로는 뭔가 불편할 것 같은데 일단 생성하면 수정이 불가능하니 그런 용도로 사용하는 이유가 있지 않을까 싶다.
Data Access Object의 약자이다. 데이터베이스의 데이터에 접근하기 위한 객체라고 한다.
설명으로는 뭔가 이해하기 힘드니 일단 코드를 살펴보자.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TestDao {
public void add(TestDto dto) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
PreparedStatement preparedStatement = connection.prepareStatement("insert into users(id,name,password) value(?,?,?)");
preparedStatement.setString(1, dto.getName());
preparedStatement.setInt(2, dto.getValue());
preparedStatement.setString(3, dto.getData());
preparedStatement.executeUpdate();
preparedStatement.close();
connection.close();
}
}
예전에 MyBatis없이 DB에 커넥션 설정할 때의 코드와 비슷하게 생겼다.
즉, DAO는 데이터베이스에 연결시키기 위해 만든 객체였다.
지금까지 계속 DTO를 만들면서 DAO라고 이름붙이고 있었는데... 잘못 알고 있었나 보다.
그리고 스프링부트도 그렇지만 MyBatis를 쓰면서 중요한 설정들을 그냥 넘어가게 되니 알고 있었던 개념들도 까먹게 되는 것 같다. 스프링으로 한번 프로젝트를 만들어 봐야겠다.
출처
https://lemontia.tistory.com/591
https://en.wikipedia.org/wiki/Value_object