해결된 질문
작성
·
327
답변 1
0
안녕하세요
우선 value object의 생명주기는 불변이니 한번에 생성하고, 삭제되는 성격을 가지고 있습니다.
네 그래서 구현한다면 다음과 같이 하면 됩니다.
public class Money {
public int value;
// Constructor to initialize the value
public Money(int value) {
this.value = value;
}
// Method to add the value of another Money object to the current object
public void add(Money money) {
this.value += money.value;
}
// Main method for testing
public static void main(String[] args) {
Money money1 = new Money(10);
Money money2 = new Money(20);
System.out.println("Before addition:");
System.out.println("Money 1 value: " + money1.value);
System.out.println("Money 2 value: " + money2.value);
// Add the value of money2 to money1
money1.add(money2);
System.out.println("\nAfter addition:");
System.out.println("Money 1 value: " + money1.value);
System.out.println("Money 2 value: " + money2.value);
}
}
아 죄송합니다. 제가 잘못된 예시를 드렸네요.
수정하신 코드가 맞습니다.
값 객체는 불변이므로 새로운 인스턴스를 반환해야 하는데 코드를 잘못 작성했네요.
public Money add(Money money) {
return new Money(this.value + money.value);
}
그리고 2번 질문은 아 제가 생명주기라는 용어를 잘못 사용해서 그런게 느끼신 것 같습니다. 생명주기가 있는 객체가 엔티티고 생명주기가 무의미한 성격을 vo로 모델링 하는 것이 맞습니다.
그리고 엔티티의 속성으로 vo가 정의되었다면 vo 객체를 생성해서 교체 할 수 있습니다.
답변 감사합니다.
몇 가지 더 궁금한게 있어서 질문드립니다!
1. 작성해주신 예시는 값을 변경하는데 괜찮은걸까요?? 불변 객체 처럼 취급 하라는 말이 아니였는지 예시에서 코드를 조금 수정했는데 이렇게 이해하면 잘못 이해한 부분인지 궁금합니다.
public final class Money { private final int value; public Money(int value) { this.value = value; } public Money add(Money money) { return new Money(this.value + money.value); } public int getValue() { return value; } public static void main(String[] args) { Money money1 = new Money(10); Money money2 = new Money(20); System.out.println("Before addition:"); System.out.println("Money 1 value: " + money1.getValue()); System.out.println("Money 2 value: " + money2.getValue()); money1 = money1.add(money2); System.out.println("\nAfter addition:"); System.out.println("Money 1 value: " + money1.getValue()); System.out.println("Money 2 value: " + money2.getValue()); } }
VO는 생성 삭제가 자유롭고 따로 생명주기가 없는줄 알았는데 생명주기가 불면 이라면 이미 만들어진 Entity에서 VO의 값을 변경해야 할 때 Entity가 다시 생성되어야 하는건가요? 아니면 그렇기에 VO의 값을 변경할 수 있는건가요?
2-1. https://www.inflearn.com/questions/1124319/vo%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 이전 질문에서 값의 수정이 필요하다면 VO 보단 Entity를 고려하라고 말씀해주셨는데 작성해주신 예시와 같이 값을 변경할 수 있다면 Entity를 고려해야 하는 이유도 궁금합니다.
2-2. Entity가 이미 생성이 되었는데 VO는 나중에 생성할 수 있나요?