해결된 질문
작성
·
39
답변 2
1
Jinyoung Choi님 안녕하세요.
강의가 도움이 되셨다니 다행이네요.
좋은 질문 남겨 주셔서 감사합니다. 🙂
Money 클래스를 사용할 때 얻을 수 있는 이점은 아래 인프런 AI 인턴의 답변을 참고해 주시면 좋을것 같아요.
일반적으로 Money와 같은 클래스를 도입하는 이유는 Long과 같은 원시형 타입으로는 표현하려는 개념을 명확하게 드러낼 수 없을 때 사용합니다.
예를 들어서 다음과 같은 클래스가 있다고 생각해 보겠습니다.
class AnyClass {
private Long amount;
private Long distance;
public void increase(Long amount, Long distance) {
this.amount += amount;
this.distance += distance;
}
}
위 클래스에서 amount와 distance는 타입은 Long으로 동일하지만 의미는 완전히 다릅니다.
하나는 금액을 의미하고 다른 하나는 거리를 의미합니다.
따라서 다음과 같이 클래스를 추가해서 의미를 명확하게 코드 안에 표현하는 것이 더 좋은 방법입니다.
class AnyClass {
private Money amount;
private Distance distance;
public void increase(Money amount, Distance distance) {
this.amount = amount.plus(amount);
this.distance += distance.add(distance);
}
}
원래의 클래스는 둘 다 Long 타입이기 때문에 파라미터를 잘못 넘기더라도 컴파일 타임에 체크를 하기 어렵습니다.
예를 들어서 AnyClass 인스턴스에 1000원을 더하고 거리에 10km를 더하고 싶다면 아래와 같이 메서드를 호출할 것입니다.
anyClass.increase(1000, 10);
프로그래머가 아래와 같이 두 값을 바꿔서 보내더라도 컴파일러는 오류를 체크할 수 없습니다.
anyClass.increase(10, 1000);
하지만 수정 후에 아래와 같이 메서드를 호출하면 타입이 다르기 때문에 컴파일 에러가 발생하게 됩니다.
따라서 더 안정적으로 코드를 작성하고 유지보수할 수 있게 됩니다.
anyClass.increase(Distance.of(10), Money.wons(1000));
일단 Money나 Distance와 같은 클래스가 있다면 금액이나 거리를 계산하는 코드가 중복될 경우 이 클래스드로 이동시켜 중복 코드를 제거할 수 있기 때문에 재사용성도 높아집니다.
개념을 명확하게 표현하고 싶을때마다 이러 작은 클래스를 만드시면 됩니다.
이런 작은 클래스들을 값 객체라고 부릅니다.
값 객체에 대한 더 자세한 내용은 아래 블로그를 참고해 주시면 감사하겠습니다.
https://eternity-object.tistory.com/2
보시면서 궁금한 내용이 있으면 언제라도 질문 주세요. 🙂
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Jinyoung Choi님, 강의에서 중요한 개념을 잘 짚어주셨네요. 가격
필드를 나타낼 때 일반적으로 Long
이나 double
자료형을 사용한다고 생각할 수 있지만, 강의에서는 Money
클래스를 사용했습니다. 이유를 간단히 설명드리겠습니다.
타입 안정성:
Long
이나 double
변수를 사용하면 가격을 다루는 코드에서 실수가 발생할 가능성이 있습니다. 특히, 소수점을 다뤄야 하거나, 다른 금액 단위와의 연산을 할 때 혼란이 있을 수 있습니다. Money
클래스를 사용하면 금액 처리 시 타입 안정성을 높일 수 있습니다.의미 명확성:
Money
클래스는 단순히 숫자의 결과로 끝나지 않고, 금액과 관련된 의미를 더 명확히 전달합니다. 이는 코드의 가독성을 높이고 유지보수 시 혼란을 줄여줍니다.부가 기능:
Money
클래스에는 단순 변수 이상의 기능이 포함될 수 있습니다. 예를 들어, 통화 단위를 관리하거나 금액의 덧셈, 뺄셈 같은 연산 기능을 포함할 수 있습니다. 이를 통해 코드 내 비즈니스 로직이 더 명확해집니다.불변 객체로 활용:
Money
클래스는 불변 객체로서, 한번 설정된 값을 변경하지 않으므로 부작용을 방지할 수 있습니다.이 외에도, 강의 중에 이러한 구현을 채택하는 이유에 대해 더 심도 있는 설명이 있을 수 있습니다. 객체지향 프로그래밍에서 이러한 특수한 클래스를 사용하는 이유는 개념의 명확화와 유지보수성을 높이기 위한 노력이라고 볼 수 있습니다.
해당 주제와 관련하여 더 깊이 있는 설명이나 강의 내 다른 부분을 참고하는 것도 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
주말 아침부터 시간 내주셔서 감사합니다!
말씀해주신 내용 이해됐어요! 값 객체에 대해서도 더 공부해보겠습니다.
친절한 답변 감사드립니다!