객체의 종류

2025. 11. 20. 23:46·개발 공부/Java-Spring

 


1. VO (Value Object: 값 객체)

"무엇인지(Identity)보다, 어떤 값을 가졌는지(Value)가 중요한 객체"

  • 불변성 (Immutability): 생성자를 통해 한 번 만들어지면 그 내부의 값이 절대 변하지 않습니다. (Setter 없음, 모든 필드는 final)
    • 이유: 여러 객체에서 참조하더라도 값이 바뀌지 않음을 보장하므로, **사이드 이펙트(Side Effect)**를 방지하여 코드를 안전하게 만듭니다.
  • 동등성 (Equality): 객체의 주소값(Identity)이 아닌, 저장된 값들이 같다면 같은 객체로 취급합니다.
    • 구현: 반드시 equals()와 hashCode() 메서드를 오버라이딩해야 합니다.
    • 예시: 만 원짜리 지폐 두 장은 서로 다른 종이(주소)지만, 가치는 똑같이 '만 원'이므로 같습니다.
  • 자가 검증 (Self-Validation): 객체가 생성될 때 스스로 유효성을 검사합니다.
    • 예시: Money 객체 생성 시 금액이 음수(-)라면 생성자에서 예외를 던져 잘못된 객체가 만들어지는 것을 원천 봉쇄합니다.

2. DTO (Data Transfer Object: 데이터 전송 객체)

"이사짐 상자 (계층 간 데이터 운반이 목적)"

  • 순수 데이터 컨테이너: 로직(비즈니스 로직)을 포함하지 않으며, 오직 getter/setter 메서드만 가집니다. (최근 Java에서는 Record를 많이 사용)
  • 용도:
    • Controller ↔ Service 또는 Service ↔ Repository 사이에서 데이터를 주고받을 때 사용합니다.
    • DB의 엔티티(Entity) 내부 정보를 모두 노출하지 않고, 화면(View)에 필요한 데이터만 골라서 전달하기 위해 사용합니다.

3. DAO (Data Access Object: 데이터 접근 객체)

"데이터베이스 관리인"

작성해주신 3가지 특징이 핵심입니다.

  1. 연결 관리: DB 커넥션 풀(Connection Pool) 등을 사용하여 연결을 관리합니다.
  2. CRUD 수행: 실제 SQL을 날려 데이터를 조회, 수정, 삭제합니다.
  3. 보안: PreparedStatement 등을 사용하여 SQL Injection 공격을 방지합니다.

참고 (트렌드): 최근 Spring Data JPA 같은 ORM 기술을 사용할 때는 DAO 대신 **Repository**라는 용어를 주로 사용합니다. 역할은 비슷하지만, 구현 방식(인터페이스만 선언하면 구현체가 자동 생성됨)에서 차이가 있습니다.

 

 

보통 웹 애플리케이션은 다음과 같은 흐름으로 이 객체들을 사용합니다.

  1. Client가 요청을 보냄
  2. Controller가 요청 데이터를 DTO로 받음
  3. Service로 DTO를 전달
  4. Service는 DTO를 Entity나 VO로 변환하여 비즈니스 로직 처리
  5. **DAO(Repository)**를 통해 DB에 저장하거나 조회

'개발 공부 > Java-Spring' 카테고리의 다른 글

spring ai 해보기  (0) 2025.12.06
객체 지향 프로그래밍(OOP)의 특징  (0) 2025.11.22
자바 예약어 final vs static  (0) 2025.10.23
interface vs abstract class  (0) 2025.09.26
정적팩토리 메서드  (0) 2025.08.15
'개발 공부/Java-Spring' 카테고리의 다른 글
  • spring ai 해보기
  • 객체 지향 프로그래밍(OOP)의 특징
  • 자바 예약어 final vs static
  • interface vs abstract class
cookiboii
cookiboii
초보 개발자입니다.
  • cookiboii
    Just Do it
    cookiboii
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 잡소리 (2)
      • vscode꾸미기 (1)
      • 회사공부 (0)
      • 면접복기 (5)
      • 개발취직관련 좋은 글귀 (12)
      • 개발 공부 (58)
        • 백준 (0)
        • web (3)
        • js&ts&react (4)
        • Java-Spring (18)
        • 개발책 리뷰 (0)
        • c++ (0)
        • git (0)
        • code up 문제 (5)
        • 네트워크 (5)
        • 자료구조&알고리즘 (2)
        • ci,cd (1)
        • 프로젝트 (9)
        • sql (4)
        • 컴퓨터구조 (1)
        • 운영체제 (5)
        • python (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • 네이버블로그
    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    springai #spring #java
    개발
    깃허브 #깃 #커밋
    포켓몬 #vscode #vscode꾸미기 #개발
    ci #개발 #git
    자바
    js #web
    자바 #Java #JPA #개발자 #개발 #초보
    코딩
    JVM
    Java
    사이드프로젝트 #토이프로젝트 #개발 #개발자
    라이엇 #api #롤api
    프로그래밍
    코드업 #코딩문제
    js #예약어 #자바스크랩트
    js #제이쿼리 #비동기통신 #코딩 #프로그래밍
    롤 #리그오브레전드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
cookiboii
객체의 종류
상단으로

티스토리툴바