[기타]VO 와 DTO 와 ENTITY 차이

DTO (Data Transfer Object)

  • 개요
    • 데이터를 전달하기 위한 객체임
    • 계층 간의 데이터 교환을 위해서 사용됨.
    • View 와 Controller 사이에서 자주 활용됨.
  • 특징
    • Getter / Setter 메서드를 포함합니다
      • 데이터를 쉽게 넣고 , 빼기 위한 메서드를 제공
    • 비즈니스 로직을 미포함
      • 데이터 전송 에 집중합니다.
      • 별도의 비즈니스 로직을 포함하면 안됩니다.
  • 예제
    // 가변 객체 예시
    public class MemberDto {
        private String name;
        private int age;
        // Getter, Setter 생략
    }
    
    // 불변 객체 예시
    public class MemberDto {
        private final String name;
        private final int age;
        // Getter, Setter 생략
    }
    • 불변하는 객체의 경우 final 로 생성자를 통해서만 초기화가 가능하도록 합니다.
    • 가변 객체의 경우 별도의 Setter 를 사용할 수 있습니다.
    • 또한 VO와 다르게 equals() , hashcode() 를 별도로 가지지 않습니다.
      • 왜냐?
        • DTO 를 객체간 비교할 필요가 1도 없습니다
        • 말했지 않나요! DTO는 데이터를 전달하기 위한 하나의 수단일뿐이라고!

VO ( Value Object )

  • 개요
    • 값을 표현하기 위한 객체입니다.
  • 특징
    • 불변 객체
      • 일단 생성되면 상태가 변하면 안됩니다.
    • 값의 비교
      • equals() 혹은 hashCode() 메서드를 오버라이딩하여 값을 비교합니다.
      • equals()
        • 재정의 하지 않는 경우 객체의 고유한 주소값으로 비교하게 됩니다.
        • 일반적으로 객체가 가진 값에 대한 비교로 객체간 비교하는 것이 올바른 경우가 많습니다.
        • 그냥 IDE 자체의 기능을 사용해서 만드는것이 편함.
    • 비즈니스 로직의 포함
      • VO는 값의 표현 뿐만 아니라, 그에 관련된 연산도 수행할 수 있음.
  • 예시
    public class Money {
        private final String currency;
        private final int value;
        // Getter, equals(), hashCode() 생략
    }
    • 항상 불변하는 값을 가져야합니다.!

Entity

  1. 개요
    • DB의 테이블과 직접적으로 매핑되는 객체임
  1. 특징
    • 식별자(ID) 가 존재합니다.
      • 각 Entity 는 고유한 식별자(ID) 로 구분된다고 합니다.
    • 비즈니스 로직을 포함 가능
    • 가변 객체와 불변 객체 모두 가질 수 있습니다.!
  1. 예시
    public class Member {
        private final Long id;
        private final String email;
        // 나머지 코드 생략
    }

분류DTOVOENTITY
정의레이어간 데이터 전송용 객체값 표현용 객체DB 테이블 매핑용 객체
상태 변경 여부가변 또는 불변 객체불변 객체가변 또는 불변 객체
로직 포함 여부로직을 포함할 수 없다.로직을 포함할 수 있다.로직을 포함할 수 있다.

회사에서는 사실상 ENTITY 이자 DTO 로 사용중인거같다 ㅋㅋ;

그걸 리팩토링 하는게 1차적 목표


Uploaded by N2T