Kotlin
-
Spring, Kotlin - InterceptorSpring 2021. 11. 25. 23:52
특정 Request 에 특정 기능을 적용하려는 경우에 Interceptor 를 사용할 수 있습니다. Request 를 가로채서(intercept) 실제 처리 이전, 이후의 작업을 추가할 수 있습니다. Method 설명 preHandle 실제 처리 부분 이전 작업 postHandle 실제 처리 부분 이후 작업 afterCompletion 전체 요청이 완료된 후 작업 Request 의 Log 를 찍어주는 Interceptor 를 생성하고 테스트를 통해 확인해보겠습니다. Spring Boot 2.6.0, Kotlin 1.6 버전을 사용하였습니다. class LogInterceptor : HandlerInterceptor { companion object { val log = LoggerFactory.getLo..
-
Kotlin - Reflection 과 생성자Kotiln 2021. 8. 4. 15:56
Reflection 을 이용하여 인스턴스를 생성하는 방법을 알아봅시다. 간단한 Person data class 를 생성했습니다. data class Person( var name: String, var age: Number = 20 ) age 프로퍼티에 기본 값으로 20 을 주었습니다. println("생성자 조회") println(Person::class.constructors) 생성자 조회 [fun (kotlin.String, kotlin.Number): chung.study.Person] 먼저 생성자를 조회해보겠습니다. Person 클래스를 생성한 것 과 같이 파라미터가 2개인 생성자가 조회됐습니다. 생성자는 KFunction 인터페이스이며 KCallable 인터페이스를 상속받고 있습니다. KCal..
-
Kotlin - jackson 을 이용하여 객체를 json 으로 변환할 때 주의점Kotiln 2021. 3. 24. 20:19
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.KotlinModule fun main(args: Array) { val testData = TestData("name", "code", false) println(testData) val objectMapper = ObjectMapper().registerModule(KotlinModule()) val res = objectMapper.writeValueAsString(testData) println(res) val data = objectMapper.readValue(res, TestData::class.java) println(dat..
-
Codility - BinaryGap [Kotlin]알고리즘 문제 풀이 2021. 2. 23. 00:11
/* * 2021-02-22 * https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ */ fun solution(N: Int): Int { val binaryString = N.toString(2) // var num = N // do { // binaryString += num % 2 // num /= 2 // } while (num != 1) // binaryString += "1" // binaryString = binaryString.reversed() val zeroList = binaryString.split("1").toMutableList() if (binaryString.last() != '1') { ..
-
프로그래머스 - 여행 경로알고리즘 문제 풀이 2021. 1. 17. 00:46
/* * 2021-01-17 * https://programmers.co.kr/learn/courses/30/lessons/43164?language=kotlin */ fun travelRoute(tickets: Array): Array { // route 를 맵으로 생성 val routeMap = mutableMapOf() tickets.forEach { val start = it[0] val dest = it[1] val routeString = "$start-$dest" val route = routeMap[routeString] if (route == null) { routeMap[routeString] = Route(start, dest, 0, emptyList(), 1) } else { rou..
-
프로그래머스 - 단어 변환알고리즘 문제 풀이 2021. 1. 2. 00:14
/* * 2021-01-01 * https://programmers.co.kr/learn/courses/30/lessons/43163 */ fun wordConversion(begin: String, target: String, words: Array): Int { // words 에 target 이 없는 경우 0 반환 if (!words.any { it == target }) { return 0 } // begin 을 포함한 allWords 생성 val allWords = words.plus(begin) // 각 단어별 노드 생성 val nodeMap = allWords.associate { it to WordNode(it) } nodeMap.forEach { (word, node) -> // 한글자만..
-
프로그래머스 - 네트워크알고리즘 문제 풀이 2020. 12. 17. 00:12
index를 set 으로 만들어서 겹치는 부분이 있는 경우 합치는 방식으로 풀었습니다. /* * 2020-12-16 * https://programmers.co.kr/learn/courses/30/lessons/43162 */ fun network(n: Int, computers: Array): Int { // index set 의 set 생성 val networkSet: Set = computers.map { c -> c.toList().mapIndexedNotNull { i, n -> if (n == 1) { i } else { null } }.toSet() }.toSet() println(networkSet) // 네트워크 set 의 set 생성 val networkResultSet: Mutable..
-
프로그래머스 - 타겟 넘버알고리즘 문제 풀이 2020. 12. 9. 00:00
풀이 /* * 2020-12-08 * https://programmers.co.kr/learn/courses/30/lessons/43165 */ var answer = 0 fun targetNumber(numbers: IntArray, target: Int): Int { answer = 0 addNumber(0, numbers, 0, target) return answer } tailrec fun addNumber(sum: Int, numbers: IntArray, index: Int, target: Int) { if (numbers.count() == index) { if (sum == target) answer++ } else { addNumber(sum + numbers[index], numbers..