DTO(Data Transfer Object)
- 의미
계층간의 데이터 전송을 위한 객체이고 오직 getter, setter만 존재한다.
값의 불변성을 위해 constructor로만 값을 주고, setter를 제거해 값을 바꿀 수 없게 할 수 도 있다.
어떠한 비즈니스 로직도 가지면 안된다.
model에서 service로 데이터를 보낼때, 값이 변하지 않도록 객체로 감싸서 보내는 것. - 사용하는 이유
도메인 모델을 계층간 전송에 사용하면, 도메인과 뷰가 강하게 연결될 수 있다. 뷰의 요구사항 변경에 의해 도메인 코드 변경은 전체 변경을 야기해 좋지 못하다. 따라서 DTO를 사용하여 결합성을 느슨하게 하는 것. - 예시
- 여기서 getter만 추가하면 된다!
VO(Value Object)
도메인에서 한 개 또는 그 이상의 속성들을 묶어서 특정 값을 나타내는 객체를 의미한다. 도메인에서 사용된다.
VO를 이해하기 위해서는 동일성, 동등성의 차이를 알아야 한다
- 동일성 : 두 객체가 동일하다는 것은 두 객체의 참조 주소가 같다는 것이다. 하지만 우리가 클래스를 통해 두 객체를 생성하였다 했을 때 두 객체의 주소는 다르므로 동일하지 않다.
- 동등성 : 두 객체의 값이 같은 것이다. 두 객체가 동일한 지 확인하려면 equals와 hashcode를 재정의 해야 한다.
@Override public boolean equals(final Object o) {
if (this == o) return true; //같은 객체이면 true
if (o == null || getClass() != o.getClass()) return false; //비교하는 객체가 null이거나, getClass(현재 참조하는 클래스를 알려준다)가 다르거나(즉 다른 클래스를 통해 만들어진 객체 둘)이면 다른 객체이므로 false
final Point point = (Point) o;
return x == point.x &&//두 객체의 값이 같은 지 확인
y == point.y; }`
@Override
public int hashCode() {
return Objects.hash(x, y);
}
이를 보면
- equals를 override한다.
- hashCode는 기본적으로 두 객체의 주소값을 사용해 해시값을 만든다. 이를 override하여, 값을 기준으로 해시 코드를 얻을 수 있다. 이를 통해 객체를 비교한다.
- 엥 그럼 DTO랑 VO랑 뭐가 달라?
VO는 지폐같은 것이다. vo한테 만원권은 만원의 고유번호와 관련없이 같은 것이라, 값 자체를 표현하는 데 사용된다.
반면에 DTO는 두 만원 화폐가 고유번호가 다르니 다른 지폐가 되는 것.
DAO(Data Access Object)
- 데이터베이스의 data에 접근하기 위한 객체이다.
- 직접 데이터베이스에 접근하여, 삭제, 조회, 삽입등의 조작을 한다.
- 즉 MVC 패턴에서 Model 역할을 하는 것이다.
'java' 카테고리의 다른 글
[java] MVC 패턴이란? 좋은 MVC 패턴을 구현하려면? (1) | 2023.11.24 |
---|---|
public void static main(String args)의 의미 (0) | 2023.11.24 |
[Java] AssertThat (0) | 2023.10.26 |
[Java] public void static main(String args)의 의미 (0) | 2023.10.26 |
[Java] 예외처리, throwable이란/ try,catch,throw,finally란? (0) | 2023.10.26 |