inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Microservice 설계(with EventStorming,DDD)

VO 관련 궁금한점

해결된 질문

406

info

작성한 질문수 3

0

VO Money 에서 add(money:Money) 함수에 대해서 궁금합니다.

VO는 불변인데 Money를 초기화 해서 값을 재할당 하는건지 어떤식으로 이해하면 좋을지 궁금합니다.

아키텍처 msa ddd

답변 1

0

han jeong heon

안녕하세요

우선 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);
    }
} 

0

info

답변 감사합니다.

몇 가지 더 궁금한게 있어서 질문드립니다!


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());
    }
}
  1. 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는 나중에 생성할 수 있나요?

 

1

han jeong heon

아 죄송합니다. 제가 잘못된 예시를 드렸네요.

수정하신 코드가 맞습니다.

값 객체는 불변이므로 새로운 인스턴스를 반환해야 하는데 코드를 잘못 작성했네요.

public Money add(Money money) {
        return new Money(this.value + money.value);
    }

그리고 2번 질문은 아 제가 생명주기라는 용어를 잘못 사용해서 그런게 느끼신 것 같습니다. 생명주기가 있는 객체가 엔티티고 생명주기가 무의미한 성격을 vo로 모델링 하는 것이 맞습니다.

그리고 엔티티의 속성으로 vo가 정의되었다면 vo 객체를 생성해서 교체 할 수 있습니다.

애그리거트 질문있습니다!

0

31

2

도메인 질문있습니다

0

47

2

MSA 질문이 있습니다

0

67

1

현재에도 강의와 동일한 방식을 사용하고 계실지 궁금합니다.

0

65

2

다른 BC 또는 마이크로서비스 담당 정보를 어떻게 이용하나요?

0

133

3

VO에 대해서 질문있습니다.

0

402

1

도메인, 바운디드 컨텍스트 관련해서 궁금합니다.

0

790

1

앱에서 DDD를 적용하는 것이 맞는걸까요?

1

747

1

도메인 영역에 대한 질문

0

313

1

클린 아키텍처와 헥사고날 아키텍처 질문

0

488

2

전략적 설계와 전술적 설계

0

314

1

DDD 현실적 적용

1

655

3

애그리거트의 크기

0

584

2

엔티티와 값객체와의 차이

0

560

1

확장성 관점에서 Value Object, Entity, Aggregate

0

402

1

도메인 서비스와 응용서비스의 구분

0

1511

1

Aggreagte 에 두개 이상의 Entity로 구성할 수 있나요?

0

632

1

VO, Entity 궁금한 부분이 있습니다.

1

436

1

안녕하세요. PPT 자료 공유 부탁 드려요.

0

509

1

usecase 작성 단계가 궁금합니다.

0

599

1

대여 도메인 장 관련 문의드립니다.

1

434

1

애그리거트 추출 질문드립니다.

0

596

1

도메인 이벤트 추출관련해서 여쭤보고 싶습니다!

0

467

1

컨트롤러 관련해서 질문이 있습니다!!

0

402

1