카테고리 없음

15 - 2. Java - DTO vs VO

lukeit 2024. 11. 4. 13:08

DTO (Data Transfer Object) - 가변 객체

  • Setter 와 Getter가 있다

  • @Data 라는 Annotation을 사용할 수 있다

    • 이 Annotation안에 아래의 것들을 한번에 모아 정의해두었다

      • @RequiredArgsConstructor
      • @Setter
      • @Getter
      • @ToString
      • @EqualsAndHashCode
    • 편의성을 제공하나, 신경써야할게 많아진다

      • ex.) Final과 Non-Final을 꼭 구분해야한다
      • 사용하지 않을 함수를 노출하게 될 수도 있다
      // main
      Member aaron = new Member(1, "Aaron");
      aaron.setAge(10);
      aaron.setEmail("aaron@gmail.com");
      
      // Member
      @Data
      public class Member {
        private final Integer id;
        private final String name;
        private int age = 0;
        private String email;
      }
      
      // 이런식으로 비교도 가능하다
            Member aaron = new Member(1, "Aaron");
            aaron.setAge(10);
            aaron.setEmail("aaron@gmail.com");
      
            Member baron = new Member(1, "Aaron");
            baron.setAge(10);
            baron.setEmail("aaron@gmail.com");
      
            System.out.println(aaron.equals(baron));

VO (Value Object) - 불변 객체

  • 데이터를 불러다가 쓸수만 있다 (조작 불가능)
  • @Getter 만 있다
  • @Value 를 사용해 아래 Annotation을 한번에 모아 정의해둘 수 있다
    • @AllArgsConstructor : 불변성을 위해 필드는 처음에만 세팅해둔다
    • ~~@Setter~~ 불변성을 위해 세팅 이후 설정 불가능하게 막는다
    • @Getter
    • @ToString
    • @EqualsAndHashCode

DTO 나 VO는 다양한 상황에 쓰기 어렵다.. 그래서 현업에서는 잘 사용하진 않는다

반응형