-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[3주차] 송금 서비스 구현 #1
base: feature/subin
Are you sure you want to change the base?
[3주차] 송금 서비스 구현 #1
Conversation
헉!! 이거 소스 코드 외 파일이 추가 됐습니다!! 저는 gitignore 사이트 에서 코틀린, 인텔리제이, 그레들 종속성을 제거해서 사용하고 있습니다 ㅎㅎ |
import com.example.estpayments.common.Constant.ZERO_BALANCE | ||
|
||
@JvmInline | ||
value class Money(val value: Long) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 값 객체를 만들 때 내부 값은 외부에 참조할 수 없게 private
으로 생성하려고 노력해요 ㅎㅎ 만약 내부 값을 비교하거나 더해야하는 상황이 있다면 메서드로 만들어 값 객체 자체가 의미가 있을 수 있도록 합니다!
만약 10,000 이라는 값이 있는지 비교하고 싶다면 Money(10,000L)
객체와 비교하게 되는거죠
|
||
fun isGreaterThan(money: Money): Boolean = value > money.value | ||
|
||
fun minus(money: Money): Money = Money(value.minus(money.value)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
kotlin 에는 operator 라는 키워드를 사용하면 - 기호로 코드를 표현 할 수 있습니다!
아래 처럼 사용했다면,
operator fun minus(amount: Money) = Money(value.minus(money.value))
아래처럼 사용할 수 있게 됩니다 ㅎㅎ
val zero = Money(1_000L) - Money(1_000L)
zero == Money(0L) // true!!
value class Money(val value: Long) { | ||
fun isPositive(): Boolean = value > ZERO_BALANCE | ||
|
||
fun isGreaterThan(money: Money): Boolean = value > money.value |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
compareTo
를 사용하면 > 기호로 코드를 표현 할 수 있습니다!
operator fun compareTo(amount: Money) = this.amount.compareTo(amount.amount)
아래처럼 사용 할 수 있습니다!
Money(100L) < Money(200L) // true
Money(100L) > Money(200L) // false
val senderAccountId: AccountId, | ||
val receiverAccountId: AccountId, | ||
val amount: Money, | ||
val transactionDate: LocalDateTime? = LocalDateTime.now(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 거래 시간을 어떻게 결정해야할지 고민이더라구요..! 사용자가 거래한 시점으로 결정을 해야할지, 아니면 데이터가 만들어진 시점을 고려해야할지 고민이 됐습니다!
저는 리트라이가 되면 사용자가 원했던 거래시간과는 괴리가 생길듯 해서 클라이언트에게 거래 시간을 전달받을 수 있도록 강제했습니다. ㅎㅎ
val userId: UserId, | ||
var balance: Money, | ||
) { | ||
fun withdrawable(money: Money): Boolean = balance.isPositive() && balance.isGreaterThan(money) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Money
의 init
에서 값이 0보다 큰지 비교하는건 어떨까요? 그럼 Money
객체는 현실의 돈과 유사한 상태를 가질 수 있어보이고 Money
객체를 사용할 때마다 값을 검증할 일이 적어보여요 ㅎㅎ
송금 서비스를 구현합니다.
작업 내용
사용자
: 계좌를 소유한 사용자계좌
: 거래를 위한 계좌거래
: 계좌 간 거래내역TODO