Conversation
|
헉!! 이거 소스 코드 외 파일이 추가 됐습니다!! 저는 gitignore 사이트 에서 코틀린, 인텔리제이, 그레들 종속성을 제거해서 사용하고 있습니다 ㅎㅎ |
| import com.example.estpayments.common.Constant.ZERO_BALANCE | ||
|
|
||
| @JvmInline | ||
| value class Money(val value: Long) { |
There was a problem hiding this comment.
저는 값 객체를 만들 때 내부 값은 외부에 참조할 수 없게 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.
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.
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.
저는 거래 시간을 어떻게 결정해야할지 고민이더라구요..! 사용자가 거래한 시점으로 결정을 해야할지, 아니면 데이터가 만들어진 시점을 고려해야할지 고민이 됐습니다!
저는 리트라이가 되면 사용자가 원했던 거래시간과는 괴리가 생길듯 해서 클라이언트에게 거래 시간을 전달받을 수 있도록 강제했습니다. ㅎㅎ
| val userId: UserId, | ||
| var balance: Money, | ||
| ) { | ||
| fun withdrawable(money: Money): Boolean = balance.isPositive() && balance.isGreaterThan(money) |
There was a problem hiding this comment.
Money의 init에서 값이 0보다 큰지 비교하는건 어떨까요? 그럼 Money 객체는 현실의 돈과 유사한 상태를 가질 수 있어보이고 Money 객체를 사용할 때마다 값을 검증할 일이 적어보여요 ㅎㅎ
송금 서비스를 구현합니다.
작업 내용
사용자: 계좌를 소유한 사용자계좌: 거래를 위한 계좌거래: 계좌 간 거래내역TODO