개발/객체지향

VO, DTO, DAO, Entity의 차이

JJ Dev. 2024. 11. 11. 00:59
반응형
이 글은 자바/스프링 개발자를 위한 실용주의 프로그래밍 (김우근 저, 위키북스)를 읽고 개인적으로 정리한 내용입니다. 내용에 오류가 있을 수 있으니 정확한 내용은 위 책을 참고해주시기 바랍니다.

VO (Value Object)

  1. 클래스에 final만 붙인다고 불변 객체가 아니다.
  2. 심지어 객체 내 필드가 모두 final이라고 반드시 불변 객체인 것은 아니다.
    • final이 붙은 멤버 변수의 참조 객체가 불변성을 지키지 않는다면 무용지물이다.
  3. 각 필드도 오브젝트라면 그 오브젝트도 불변이어야 함
  4. Lombok 라이브러리의 @Value 어노테이션을 사용하면 VO로 사용 가능해진다.
  5. VO가 되기 위한 3가지 조건
    1. 불변성
      • 값은 변하지 않는다. 숫자 1은 영원히 숫자 1
      • 불변성을 유지하기 위한 예시(불변 객체, VO는 아님)
        • 값 변경 시에는 아예 새로운 객체를 리턴해 멀티 쓰레드 환경에서도 문제 없이 동작할 수 있도록 한다.
        • 일반 setter처럼 동작하면 두 쓰레드가 동시에 객체를 참조할 때 기대하는 값이 리턴되지 않을 확률이 매우 높아진다.
    2. 동등성
      • 값의 가치는 항상 같다. 땅에 적힌 숫자 1과 책에 적힌 숫자 1은 같은 1이다
      • 두 개의 VO 클래스가 있을 때 equals를 실행하면 같다고 나와야 한다
    3. 자가 검증
      • 값이 그 자체로 올바르다. 즉, 1이 1.01이지 않을지 고민하지 않아도 된다
      • 객체를 생성할 때 자체적인 Validation이 있어야 한다

DTO (Data Transfer Object)

  1. DTO는 객체라고 보기도 어렵다
  2. 그냥 데이터 하나하나 전달하기 불편해서 한 덩어리로 전송하기 위해 만들어진 객체이다
  3. 멤버 변수들 private으로 선언해놓고 Getter, Setter 다 쓸 거면 뭐 하러 private 선언하는지 모르겠다
  4. DTO는 어떤 상황에서도 쓸 수 있는거니까 언제 써야한다 언제 쓰지마라라고 너무 편협하게 생각하지 말자

DAO (Data Access Object)

  1. DAO의 존재 목적은 도메인 로직과 데이터베이스 연결 로직을 분리하기 위함이다

Entity

  1. Entity란 데이터로 표현하려는 유무형의 대상이다.
  2. Entity는 JPA에서 만들어진 용어가 아니고 JPA에서의 Entity는 Entity의 하위 개념이다.
  3. Entity의 하위 개념
    1. 도메인 Enitity
      • 식별 가능하고 비즈니스 로직을 갖고 있으며, 조금 특별하게 관리되는 클래스로 만들어진 객체
    2. DB Entity
      • 그냥 데이터베이스 분야에서 어떤 유무형의 객체를 표현하기 위해 사용하던 단어
    3. JPA Entity
      • 관계형 데이터베이스에 있는 데이터를 객체로 매핑하는데 사용되는 클래스

출처

  • 자바/스프링 개발자를 위한 실용주의 프로그래밍 (김우근 저, 위키북스)
반응형

'개발 > 객체지향' 카테고리의 다른 글

[OBJECTS 책 공부] 역할, 책임, 협력  (0) 2022.01.17