엔티티 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)
참조
'Design' 카테고리의 다른 글
객체지향 5대 원칙 SOLID (0) | 2021.05.15 |
---|---|
Layered Architecture in DDD (0) | 2021.02.04 |