본문 바로가기
기술도서/자바스프링 개발자를 위한 실용주의 프로그래밍

자바스프링 개발자를 위한 실용주의 2. 객체 종류

by jasNote 2024. 11. 9.

VO - 신뢰할 수 있고 예측 가능한 객체

  • 불변성 : 값은 변하지 않는다. 숫자 1은 영원히 숫자 1이다.
    • 값을 바꾸지 못하도록 보장.
    • 혹은 완전히 새로운 인스턴스로 반환
  • 동등성 : 값의 가치는 항상 같다. 1은 적혀있는 위치나 시간에 관계없이 항상 1이다.
    • equals, hashCode를 오버라이딩 할 필요가 있음
    • id를 포함하면 안됨.
  • 자가검증 : 검증할 고민 없이 그자체가 올바른 값이다.

 

DTO - 데이터 전송간 객체

  • 데이터를 전송하는 본연의 임무를 다 하면 된다.
  • getter/setter, public/private 사용유무와는 별개이다.
  • @Data 어노테이션은 개발자가 데이터 중심의 사고를 하도록 한다. 행동 위주의 사고를 하는 객체지향과 멀어진다.

DAO. 데이터 접근 객체

  • 도메인 로직과 DB연결 로직을 분리하기 위한 객체

Entity. 개체

  • 도메인 엔티티
    • 식별 가능하고 비즈니스 로직을 갖고 있으며, 조금 특별하게 관리되는 클래스로 만들어진 객체.
    • 도메인에 존재하는 문제를 해결하기 위해 ‘도메인을 모델링한다’ 라고 한다.
    • 도메인 모델 안에 포함되는 객체들(도메인 엔티티, 도메인 VO, 도메인 DTO 등등..) 중 하나
  • DB 엔티티
    • DB에서 유무형의 객체를 표현하기 위한 수단.
    • 여기서의 객체는 객체지향과는 다른 데이터 모델에 가까운 개념
  • JPA 엔티티
    • DB에 뿌리를 두고있다.
    • 엔티티를 JPA라고 인식하고 개발을 하게되면 DB에 종속되는 프로그램을 만들 확률이 높다
  • 해석
    • 소프트웨어에서의 엔티티는 도메인 엔티티이다.

객체의 다양한 종류

다양한 객체의 종류를 배웠다. 사실 용어와 개념들을 엄격하게 지키고 분류하는 것이 목표가 아니다. 위와 같은 가치들을 프로젝트에 지속적으로 적용해 보는 것이 핵심이다.

 

추가적으로 java16의 record 기능은 vo의 기능을한다. 객체의 변수들은 모두 final로 선언되고 equals, hashCode, toString와 같은 메서들이 자동으로 만들어진다.