본문 바로가기

kotlin21

[kotlin] property, backing field kotlin에서는 필드가 아닌 프로퍼티를 정의한다고 합니다. val name: String = "" // 불변 var name: String // 가변 프로퍼티는 var, val로 선언할 수 있습니다. var는 가변변수로 값을 변경할 수 있습니다. val는 불변변수로 값을 변경할 수 없습니다. java에서는 getter, setter를 보통 get필드이름. set필드이름 이라는 함수명으로 개발자가 직접 만들어 줬어야 합니다. kotlin에서는 프로퍼티에 getter, setter를 정의할 수 있습니다. data class MyTest ( val name: String ) { val fullName: String get() = "full $name" var diffName: String = "" get().. 2021. 2. 4.
[kotlin][coroutine] awaitRetrieve 응답이 200이고 응답 body에 대한 처리만 하고 싶은 경우 retrieve. 이 외에 응답 코드가 4xx, 5xx 등 특정 코드에 따라 다른 결과를 주고 싶거나 응답 헤더를 사용하고 싶은 경우는 exchange를 사용하자. (참고 : [spring] webClient error 처리) 평소에 4xx, 5xx 일 때 에러는 신경안쓰고 body에 대해서만 고려해서 retrieve를 많이 사용했었다. coroutine으로 전환하면서 awaitRetrieve 를 쓰려고 했는데 없었다. 그러나 package org.springframework.web.reactive.function.client.WebClientExtension 에 awaitExchange 함수는 있다. (참고) suspend fun Reque.. 2020. 4. 5.
[JUnit5] @ParameterizedTest @ParameterizedTest 어노테이션은 테스트 함수에 파라미터로 TC나 결과 등을 주입할 수 있다. // build.gradle.kts dependencies { // add testImplementation("org.junit.jupiter:junit-jupiter-params:5.5.2") } 의존성추가 private fun String?.toIntOrNull(): Int? { return if (this.isNullOrEmpty()) null else try { this.toInt() } catch (e: NumberFormatException) { null } } 테스트를 위와 같은 확장 함수를 하나 만들었다. 문자열이 null이거나 빈 경우 null을 반환하고 아닌 경우 문자열을 Int로.. 2019. 12. 15.
[IntellJ] Kotlin 코드를 java 코드로 확인하기 Tools > Kotlin > Show Kotlin Bytecode 클릭 왼쪽에 있던 코틀린으로 작성했던 Board.kt가 오른쪽과 같이 바이트코드화 되어 결과를 확인할 수 있다. 오른쪽 위에 Decompile 버튼을 누르면 위와 같이 java 코드로 확인할 수 있다. 2019. 12. 9.
[Kotlin] String to LocalDateTime parse 말머리가 Kotlin인 이유는 kotlin으로 작성했기 때문.. java라고 봐도 무방하다. import java.time.LocalDateTime.of class LocalDateTimeTest { @Test fun test() { // expect assertEquals(of(2019, 12, 4, 12, 3, 12), "2019-12-04 12:03:12".toLocalDateTime()) assertEquals(of(2019, 12, 4, 12, 3), "2019-12-04 12:03".toLocalDateTime()) assertEquals(of(2019, 12, 4, 12, 3,12,100000000), "2019-12-04 12:03:12.1".toLocalDateTime()) } } 테스트.. 2019. 12. 7.
[JUnit5] @TestInstance TestInstance 는 테스트 인스턴스의 라이프 사이클을 설정할 때 사용한다. - PER_METHOD : test 함수 당 인스턴스가 생성된다. - PER_CLASS : test 클래스 당 인스턴스가 생성된다. @TestInstance(TestInstance.Lifecycle.PER_CLASS) class Test() { @BeforeAll fun setUp(){ println("setUp") } @AfterAll fun clean(){ println("clean") } @Test fun test() { } } 위와 같이 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 어노테이션으로 라이프 사이클을 클래스 단위로 설정할 수 있다. 라이프 사이클을 클래스 단위로 지.. 2019. 12. 4.