DTO (Data Transfer Object): 데이터 전송 객체
서로 다른 계층 간에 데이터를 효율적으로 전달하는 데 사용되는 객체
주요 역할:
- 여러 개의 관련 데이터를 하나의 객체로 묶어서 전달하여 데이터 전송 효율성을 높인다
- 계층 간 데이터 교환을 위한 규약 역할
- 데이터를 캡슐화하여 코드의 가독성을 향상시킨다
특징:
- 주로 필드(멤버 변수)와 Getter/Setter 메서드로 구성
- 비즈니스 로직을 포함하지 않고 순수하게 데이터를 담는 역할만 한다
- 직렬화 및 역직렬화가 가능하여 네트워크를 통한 데이터 전송에 용이
- 불변 객체로 설계하여 데이터의 안정성을 높일 수도 있다
DAO (Data Access Object): 데이터 접근 객체
데이터베이스와 같은 데이터 저장소에 접근하여 데이터를 CRUD 하는 역할을 담당한다
주요 역할:
- 데이터 접근 로직을 비즈니스 로직에서 분리하여 코드의 가독성과 유지보수성을 높인다
- 특정 데이터베이스 기술에 종속적인 코드를 캡슐화하여 데이터베이스 독립성을 확보
- 일관된 데이터 접근 방식을 제공하여 코드 재사용성을 높인다
- 데이터 접근 과정에서 발생하는 예외를 처리
특징:
- 데이터베이스 연결 관리, SQL 실행, 결과 매핑 등의 로직을 포함
- 주로 인터페이스와 구현 클래스 형태로 구성
- 데이터베이스 기술 (JDBC, ORM 등)을 사용하여 데이터 저장소와 상호작용
- 데이터를 DTO나 Entity 형태로 주고받는다
VO (Value Object): 값 객체
값 자체를 표현하는 불변 객체로
동일성을 비교할 때 객체의 상태(모든 필드의 값)가 동일하면 같은 객체로 취급한다
주요 역할:
특정 도메인 개념을 나타내는 값을 캡슐화 (예: 주소, 날짜, 통화 등)
값의 의미를 명확하게 표현하고 코드의 가독성을 높인다
불변성을 통해 객체의 안정성과 예측 가능성을 높인다
특징:
- 주로 필드(멤버 변수)와 Getter 메서드로 구성되며, Setter 메서드는 제공하지 않거나 private으로 설정하여 값의 변경을 막는다
- equals()와 hashCode() 메서드를 오버라이드하여 객체의 내용 기반 비교를 구현
- 생성 시 초기화된 값은 변경할 수 없다
