코틀린의 runCatching
·
kotlin
try-catch는 못 생긴 것 같다@Transactionalfun chargeUserPoint(chargePointPayment: ChargePointPayment) { try { userPointManager.chargePoint(chargePointPayment.userId, chargePointPayment.chargePointType.amount) chargePointPayment.charge() chargePointPaymentRepository.save(chargePointPayment) } catch (e: Exception) { failChargePointPaymentEventProcessor.publishEvent(FailCh..
코루틴 맛 보기
·
kotlin
이벤트 재발행 처리하기 - Transactional Outbox Pattern이벤트 발행으로 결제 후처리 하기점점 많아지는 결제 후 처리 과정진행중인 사이드 프로젝트는 수능 문제를 구매하는 플랫폼으로 유저는 포인트를 지불해서 수능 문제를 구매할 수 있습니다.pe4g3r.tistory.com 사이드 프로젝트에서 Transactional Outbox Pattern을 도입하였습니다.이전 포스팅에서는 발행되지 않은 이벤트를 DB로부터 1000개 단위로 조회하고 AWS SNS로 재발행하는 로직을 코루틴으로처리하였습니다. AWS SNS 발행은 AWS API를 사용하기에 1000개의 요청을 동시적으로 처리하기 위해 코루틴을 도입하였습니다.단순히 사용법 정도만 익히고 작성한 코드여서 공식문서를 다시 읽어보는 시간을 가..
코틀린 이모저모 - 5
·
kotlin
Function Parameterfun param(a: Int, b: Int = 100, c: Int = 100): Int { return a + b + c}fun main() { param(a = 1, b = 2, c = 3) param(a = 1, c = 3)} 코틀린에서 함수의 파라미터는 default 값을 가질 수 있습니다. 위 코드에서도 param 함수를 호출할 때 default 값이 있는 파라미터를전달하지 않는 경우는 default 값이 사용되며 함수를 호출할 때 파라미터 이름을 명시해서 어떤 값을 전달할 지 정할수도 있습니다.Single-expression functionfun double(x: Int): Int = x * 2fun double(x: Int) = x * 2 코..
코틀린 이모저모 - 4
·
kotlin
Inline Value Classclass Product( private val name: String, private val price: Int)// ------------------------------class Product( private val name: String, private val price: Price)class Price( private val price: Int) 상품을 의미하는 Product 클래스에서 가격을 보관할 때 Int 값으로 가격을 보관할 수도 있지만, 주로 DDD 관련 이론에서 볼 수 있는값을 의미있는 특정 타입으로 감싸서 보관하는 방법도 있습니다. 이런 경우 별도의 클래스를 만들어서 처리할 수 있습니다.class Product( pri..
코틀린 이모저모 - 3
·
kotlin
확장 함수fun String.twicePrint() { println(this) println(this)}fun main() { val str = "Hello World" str.twicePrint()}// Hello World// Hello World 일반적으로 클래스, 인터페이스에 기능을 추가하고 싶다면 상속 혹은 디자인 패턴을 통해 처리를 해줘야했습니다.하지만 위 예제는 String이라는 클래스에 twicePrint라는 메서드를 추가했습니다.직접적으로 String 클래스를 수정한 것이 아닌 추가적인 선언만 했습니다. 이러한 기능을 코틀린에서는 확장 함수라고 합니다.open class Shapeclass Rectangle: Shape()fun Shape.getName() = "S..
코틀린 이모저모 - 2
·
kotlin
Classclass Person { /*...*/ } 코틀린은 class 키워드를 통해 클래스를 정의할 수 있습니다.class Person constructor(firstName: String) { /*...*/ } // OKclass Person(firstName: String) { /*...*/ } // OK 클래스 선언부에 constructor 키워드를 사용하여 기본 생성자를 정의할 수 있습니다.기본 생성자가 가시성 수성자 private, protected, internal을 필요로 하지 않는다면 constructor 키워드는 생략 가능합니다.(Java - 접근 제어자)class Car(color: String, weight: Int, speed: Int, storage: Int) { val ..
코틀린 이모저모 - 1
·
kotlin
Kotlin Docs | Kotlin kotlinlang.org 프로젝트를 코틀린으로 전환한 이후 문법 공부를 위해 코틀린의 공식문서를 쭉 읽으면서 자바와는 달랐던 것, 코틀린의 신기한 것들을위주로 정리하기로 하였습니다.Smart casts코틀린에서는 is 키워드를 통해 객체가 특정 타입인지 확인할 수 있습니다.if (obj is String) { println("obj is String")} if문을 만족한다면 obj라는 객체는 String 타입이란게 확실하다는 것이죠.fun demo(x: Any) { if (x is String) { print(x.length) // x is automatically cast to String }} 위 코드처럼 컴파일러가 특정 객체의 타입..