값 객체에 대해 아시나요?
프론트엔드 개발자로서 일을 하다보면 종종 나누는 이야기가 있습니다. 그 중 하나는 바로
"프론트엔드 개발을 하면서 클래스를 써본 경험이 있나요?"
입니다. 전 종종 쓰기도 하고 곧 블로그로 글을 쓸 예정인데요, 이번에 소개해드릴 글은 클래스를 사용할 때 유용한 개념 중 하나인 '값 객체Value Object' 입니다. 값 객체는 이미 존재하는 타입(예를 들어 string, Date 등)을 통해 만드려는 시스템을 표현하는 데 한계가 있을 때 사용합니다.
예를 들어, 아래와 같이 개발하실 때가 많을 텐데요.
const startDate = new Date(2023, 1, 1);
const endDate = new Date(2023, 1, 2);
if (startDate > endDate) {
// 값이 잘못됐다는 오류
}
// 이 코드가 반복돼서 아래와 같이 함수 제작
function isStartGreaterThanEnd(startDate, endDate) {
return startDate > endDate;
}
if (isStartGreaterThanEnd(startDate, endDate)) {
...
}
이렇게 하는 대신 값 객체를 사용하면 아주 그럴싸(응집도가 올라가는 등)해집니다.
class EventDate {
#date;
constructor(date) {
this.#date = date;
}
...
greaterThan(date) {
return this.#date > date;
}
}
const startDate = new EventDate(new Date(2023, 1, 1));
const endDate = new EventDate(new Date(2023, 1, 2));
if (startDate.greaterThan(endDate)) {
...
}
}
하지만 이런 값 객체를 사용하려면 몇 가지 지켜야할 내용이 있는데요, 찾아보면 생각보다 어려운 개념들이 많고 DDD와 관련된 내용도 많아서 접근하기가 꺼려지는게 사실입니다.
그래서 길가다 주운 좋은 아티클을 소개드리려고 합니다. (영어지만 요즘은 AI가 번역해준다는 사실... ㅎㅎ)
그리고 조만간 관련해서 블로그를 통해 소개해드리겠습니다 !