POJO vs DTO vs DAO vs VO vs Entity

so2·2021년 11월 28일

POJO

  • Plain Old Java Object
  • 프레임워크를 사용하기 위해 사용하는, 어떤 제약이 없는 평범한 자바 객체
  • 비즈니스 처리가 아닌 데이터를 보존하는 역할을 함
  • getter/setter를 가진 단순한 자바 오브젝트

DTO

  • Data Transfer Object
  • 계층(layer)간 데이터 교환을 위해 사용하는 객체
  • 데이터를 담는 그릇, 전달될 데이터를 보존해야함
  • 로직을 갖지 않고, getter/setter 메소드만 갖는다

DAO

  • Data Access Object
  • DB의 데이터에 접근, 조작하기 위한 객체
  • DB 접근을 위한 로직과 비즈니스 로직을 분리하기 위해 사용
  • POJO 객체를 사용해 저장하거나 가져올 수 있음

VO

  • Value Object
  • 값 그 자체를 표현하는 객체
  • 로직을 포함할 수 있으며, 객체의 불변성을 보장 (read only)
  • 서로 다른 이름을 갖는 vo 인스턴스라도 모든 속성 값이 같다면 같은 객체
  • Object 클래스의 equals(), hashCode()를 오버라이딩 해야 한다
    • equals()
      Object 클래스의 equals() 메소드는 반드시 자기 자신만 true 값을 반환하도록 주소값 비교를 한다. 만약 equals()의 별도의 로직이 필요하다면 재정의 해야 한다
    • hashCode()
      equals() 메소드를 재정의 할 때 반드시 같이 재정의 해줘야 한다. Object 클래스의 hashCode()는 자기 자신을 제외한 모든 인스턴스는 다른 hashCode를 갖게 된다. 따라서 같은 타입이라도 다른 인스턴스라면 다른 hashCode 값을 가진다. 그렇기 때문에 HashMap, HashTable과 같은 경우 key를 제대로 찾지 못하게 될 수 있다.
    class Color {

      private int R,G,B;

      public Color(int r,int g, int b){...}

      //getters and setters

      public final static Color RED = new Color(255,0,0);

      public final static Color GREEN = new Color(0,255,0);

      public final static Color BLUE = new Color(0,0,255);

    }

Entity

  • 실제 DB와 1:1로 매핑되는 객체
  • id를 통해 각각의 Entity를 구분한다
  • 로직을 가질 수 있다

    Entity는 Request/Response 용으로 사용하면 안된다
    Request/Responses는 변경들이 자주 생길 수 있다. Entity는 테이블과 관계가 있는데, 이를 이용하는 것은 테이블 스키마의 변경을 초래할 수 있다.

0개의 댓글