본문 바로가기
자바(Java)

Bean, VO, DTO, Entity 구분하기

by codeyaki 2023. 7. 26.
반응형

개발을 하면서 데이터를 다루기 위해서 여러 종류의 클래스들을 사용하게 되는데 대표적으로 Bean, VO, DTO, Entity 등이 있다. 이것들을 구분하여 언제 사용해야 하는지 알아보는 시간을 가져보았다.

 

Bean

Bean은 Java Bean과 Spring Bean으로 나눠지는데 조금 다른 의미가 있어 구분할 필요가 있다고 생각한다.

Java Bean

  • 자바로 작성된 소프트웨어 컴포넌트
  • 클래스로 동작하기 위해 따라야할 몇 가지 관례가 있다
    • 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원시키기 위해)
    • 클래스는 기본 생성자를 가지고 있어야 한다.
    • 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.
    • 클래스는 필요한 이벤트 처리 메서드들을 포함하고 있어야 한다.
  • DTO, VO가 이에 해당된다.

Spring bean

  • 스프링 빈은 스프링 프레임워크에서 관리되는 객체
  • 스프링은 자바 빈을 IoC에서 자동으로 생성하고 관리하는데, 이러한 빈들을 스프링 빈이고 함
  • 스프링 빈은 스프링 컨테이너에 등록되어, 필요한 곳에서 DI(Dependency Injection)를 통해 쉽게 사용가능
  • 주로 비즈니스 로직을 담당하는 클래스를 스프링 빈으로 등록하여 애플리케이션의 구성과 관리를 편리하게 한다.

즉, 둘의 차이는 스프링 개발자가 관리하는 객체라면 Java Bean, IoC를 통해서 스프링이 관리를 하는 객체라면 Spring Bean이라고 부르게 된다.

 

DTO (Data Transfer Object)

  • 계층 간에 데이터 전송을 위한 객체
  • 데이터 교환을 위해 사용하기 때문에 따로 로직을 가지지 않고 getter/setter만 갖고 있다
  • 데이터 전송을 위해서 보통 Serialization 할 수 있어야 한다.

VO (Value Object)

  • 불변의 객체(변하지 않음)로 값 그 자체를 의미하기 위해서 사용한다.
  • 로직을 포함할 수 있지만 객체의 정보를 변경하지 않도록 보장해야 한다.
  • 두 객체의 필드값들이 같다면 주소와 상관없이 두 객체는 같은 객체로 취급한다.
    따라서 equals()와 hashCode()를 오버라이딩 해야 한다.

Entity

  • 실제 데이터베이스와 매핑되는 객체, 주로 ORM(Object-Relational Mapping) 기술을 사용할 때 사용
  • 데이터베이스의 엔티티와 매우 유사한 구조로 구성되어 있어 엔티티와의 상호작용을 담당한다.
  • 도메인 로직을 가질 수 있다

 

따라서 전체적인 흐름은 이러하다

반응형