Repository

Danny·2025년 1월 9일
0

백엔드

목록 보기
11/11

Data Access Object


왜 Repository클래스를 사용하지 않고 DAO를 사용하셨나요?

Repository 패턴 사용시 외부 객체에서 Repository에 대한 직접적인 접근을 하지 않아야한다.
JPA를 사용중에는 Repository는 해당 엔티티의 모든 변경을 데이터베이스에 조작 할 수 있기 때문에 Repository는 서비스(비즈니스 로직)을 통해서 외부객체에 서비스 해야한다고 생각한다.

외부 객체에 서비스를 제공하는 것은 Repository와 같은 데이터 접근 계층을 감싸고, 서비스 계층을 통해 비즈니스 로직과 데이터 접근을 조율한다는 의미. 이 방식으로 외부 객체는 Repository를 직접 호출하지 않고, 비즈니스 로직을 반영하는 적절한 서비스만 사용 할 수 있다.


Data Transfer Object

왜 DTO를 사용하셨나요?

DTO는 Data Transfer Object의 약자로, 계층 간(Controlelr, View, Business Layer) 데이터 교환을 위한 Java Bean를 의미한다. DTO는 로직을 가지지 않는 데이터 객체이고, getter, setter 메소드만 가진 클래스를 의미하는데

View Layer와 DB Layer의 역할을 분리하기 위해서
, 객체를 표현하기 위한 계층과 저장하는 계층의 역할을 분리하기 위해서 DTO를 사용한다.
또한, Entity 객체를 그대로 사용하면 프로그래머의 의도와 다르게 데이터가 변질 될 수도 있다.


Value Object

왜 VO를 사용하시나요?

VO는 Value Object의 약자로, Read-Only 속성을 가진 값 오브젝트이다. 자바에서 단순히 값 타입을 표현하기 위하여 불변 클래스(Read-Only)를 만들어 사용한다. 따라서 getter기능만 존재한다.

VO가 필요한 이유는 primitive 타입이 도메인 객체를 모델링하기 위해 충분하지 않기 때문,
primitive 타입으로는 도메인에서 의미 있는 값으로 인식 하기 힘들다.

Reference

❓ DTO vs VO
DTO는 가변의 성격을 가진 클래스이며 데이터 전송을 위해 존재한다. 따라서 getter와 setter 기능을 모두 가지고 있다.
그에 반해, VO는 값 그 자체의 의미를 가진 불변 클래스(Read-Only)를 의미한다. 따라서 getter 기능만 존재한다.
→ DTO는 인스턴스 개념이라면, VO는 리터럴 개념으로 이해하면 편하다.

profile
smlee

0개의 댓글