본문 바로가기

Design

Entity, VO, DTO

The Entity..?

엔티티 Entity

엔티티는 식별 가능한 객체이다. 쉽게말해 식별자를 가지고 있는 객체이다.이 식별자는 소프트웨어 생애 주기 내에 동일하게 유지된다.다른 말로 '연속적으로 식별성을 가진다', '모델의 생명주기를 가진다' 라고 할 수 있겠다.

식별자는 엔티티마다 고유해서 각 엔티티는 서로 다른 식별자를 가진다. 엔티티의 속성이 변경되더라도 한번 생성된 엔티티는 동일한 엔티티이다.

엔티티는 모델 스스로 처리 가능한 비즈니스 로직을 수행하는 역할을 한다.

아래 코드를 보자.

public class Entity {
	private final long id;
	private String name;

	public Entity(long id, String name) {
		this.id = id;
		this.name = name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

Entity a = new Entity(1, "A entity");
a.setName("B entity");

 

a 엔티티는 이름이 "A entity"에서 "B entity"로 변경되었다. 하지만 엔티티의 이름이 바뀌었을 뿐, 다른 엔티티가 된것은 아니다.

엔티티를 구현한 클래스는 식별자를 이용한 equals 메소드와 hashCode메소드를 구현 할 수 있다.

DTO(Data Transfer Object)

각 레이어 사이에 데이터를 전달하기 위해 사용하는 객체이다. 일반적으로 전달하는 데이터에 대한 속성과 set, get 메소드로 구성되어 있다.

보통 요구사항에 의해 데이터를 가공하거나, 필요한 데이터만 추출해서 전달 할 경우 사용한다.

VO(Value Object)

값 자체로 의미가 있는 객체이다.

단순히 값을 가지는 객체이며, 값이 같다면 같은 객체라고 판단한다.

public class VO {
	private String name;

	public VO(String name) {
		this.name = name;
	}
}

VO aVO = new VO("a vo");
VO AVO = new VO("a vo");

aVO 객체와 AVO객체는 가지고 있는 값이 같기때문에 같은 객체이다.(aVO == AVO)

DTO vs VO

DTO와 VO는 견해에 따라서 같은 의미로 사용하기도 하고, 다른 의미로 사용하기도 한다.

DTO는 메소드 호출 횟수를 줄이기 위해 데이터를 담고있는 객체.

VO는 값이 같으면 동일한 객체라고 판단 할 수 있는 객체.

아래 코드를 보자.

DTO aDTO = new DTO("a DTO");
DTO ADTO = new DTO("a DTO");

VO aVO = new VO("a vo");
VO AVO = new VO("a vo");

DTO는 값이 같다고 해서 같은 객체로 볼 수 없다. (aDTO ≠ ADTO)

하지만 VO는 값이 같다면 같은 객체로 볼 수 있다.(aVO == AVO)

참조

 

혹시 DTO(VO) 작성하시나요?

자바지기님의 애플리케이션 개발은 어떤 순서로 하면 좋을까?(http://www.slipp.net/questions/21)) 라는 주제의 글을 보다가 클래스에 속성을 추가한다는 글을 접하고 질문을 드립니다. (속성은 어떤 의

www.slipp.net

 

최근에 느낀 DTO와 관련한 이야기 - 내 가슴 속에 열정이... - SLiPP::위키

지난 주 목요일 프로그래머로 산다는 것의 출판 기념 회식에 초대 받아 참석하게 되었다. 다른 분들은 안면식이 있는 분들인데 김성박 님은 온라인으로만 뵙다가 오프라인에서 뵈니까 넘 반가

www.slipp.net

 

JPA - 4-2주차 : DDD(Domain-Driven Design) - SLiPP 스터디 - SLiPP::위키

DDD (Domain-Driven Design; 도메인 주도 설계)   소프트웨어 개발 대상은 대부분 컴퓨터와 무관하다. IT가 발전하면서 개발 대상은 점점 더 복잡해 지고 이해하기 어렵다. 하지만 좋은 소프트웨어를 만

www.slipp.net

 

Domain Driven Design Development Spring Portfolio

This is a presentation I gave at Ann Arbor Java User Group (AAJUG) last week on Domain Driven Design and Development Using Spring Portfolio projects.

www.slideshare.net

 

 

'Design' 카테고리의 다른 글

객체지향 5대 원칙 SOLID  (0) 2021.05.15
Layered Architecture in DDD  (0) 2021.02.04