Kotlin

    IP주소 32비트 정수 변환 및 되돌리기 AI 코드 및 성능 비교

    IP 주소를 32비트 정수로 변환하고 32비트 정수로 변환된 IP 주소를 다시 문자열로 되돌리는 코드가 필요해 간단히 Copilot과 ChatGPT4에게 물어봤다. fun ipToNumber(ipAddress: String): Long { return ipAddress.split(".").fold(0L) { total, next -> total * 256 + next.toInt() } } 아이피 주소를 32비트 정수로 변환하는 로직은 두 AI는 동일한 코드를 내놓았다. 그럼 되돌릴땐 어떨까? Copilot: fun numberToIp(number: Long): String { return (0..3).map { number shr (8 * it) and 0xFF }.reversed().joinToStri..

    [DGS] GraphQLSchema: Factory method 'schema' threw exception; nested exception is java.lang.NoSuchMethodError 에러 해결

    [DGS] GraphQLSchema: Factory method 'schema' threw exception; nested exception is java.lang.NoSuchMethodError 에러 해결

    Kotlin + Spring boot + Webflux + Netflix DGS + Groovy 스택에서 개발 환경을 구현하던 중 발생한 여러 에러 중 하나 에러 로그 2023-05-01 23:13:35.236 WARN 5227 --- [ restartedMain] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webHandler' defined in class path re..

    Observer 패턴 예제

    Observer 패턴 예제

    Observer Interface interface Observer { fun update() } Subject Interface interface Subject { fun register(obj: Observer) fun unregister(obj: Observer) fun notifyObservers() fun getUpdate(obj: Observer): String } Topic Class class Topic : Subject { private val observers: MutableSet = mutableSetOf() private var message: String = "" override fun register(obj: Observer) { observers.add(obj) } overri..

    var list = mutableListOf<T>() 를 사용하지 마세요.

    변경할 수 있는 리스트를 만들어야 한다고 가정해 봅시다. val list1 = mutableListOf() var list2 = listOf() 위 두가지 모두 다음과 같은 방법을 이용하여 변경할 수 있습니다. list1.add(1) list2 = list2 + 1 모두 정상적으로 작동하지만 장단점이 있습니다. 두 가지 모두 변경 가능 지점(mutating point)가 있지만 위치가 다르다는 점입니다. 첫 번째 코드는 구체적인 리스트 구현 내부에 변경 가능 지점이 있습니다. 멀티스레드 처리가 이루어지면 내부적으로 동기화가 적절하게 되어 있는지 알 수 없어 위험하게 됩니다. 두 번째 코드는 프로퍼티 자체가 변경 가능 지점입니다. 따라서 멀티스레드 처리의 안정성이 더 좋다고 할 수 있겠지만 구현을 잘못 하..

    java.lang.IllegalArgumentException: Malformed escape pair at index 해결

    java.lang.IllegalArgumentException: Malformed escape pair at index 해결

    Error creating bean with name 'postConstructInitializeBean': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Malformed escape pair at index redis 서버와 연동을 테스트 하려던 중 발생한 오류이다. lettuce 에서 뿜어낸 에러 같은데, RedisClient 를 create 할 때 입력해주는 비밀번호에 있는 특정 문자를 제대로 입력 받지 못하는 것 같다. 로 되어 있는 코드를 URLEncoder.encode() 를 이용하여 주었고, UTF-8 로 인코딩 하도록 했다. 이후 에러가 해결되었다. 필자의 경우에는 sprin..

    갤럭시 S22+ 삼성단독 컬러 사전구매가 너무 하고 싶었던 개발자의 개발

    갤럭시 S22+ 삼성단독 컬러 사전구매가 너무 하고 싶었던 개발자의 개발

    갤럭시 S22+ 기기의 삼성 갤럭시 스토어 단독 컬러인 크림 색상을 너무 갖고싶었지만 매진이 되는 바람에 크롤링 프로그램을 만들어서 주기적으로 확인해주는 프로그램을 만들었었습니다 :) 크롤링은 처음 해보는 것이었는데, selenium 을 통해서 개발을 쉽게 할 수 있었습니다. https://github.com/kotlin-telegram-bot/kotlin-telegram-bot 를 활용해서 텔레그램 봇 또한 연동해보려 하였지만 생각보다 빠르게 구매를 하게 되어서, 거기까진 가지 않게 되었습니다! 소스코드는 아래에 있으며, 크게 뜻을 두고 작성한 코드는 아니라서, 코드가 지저분할 수 있습니다. 성공 사진 갤럭시 캠퍼스 스토어와 공식 스토어 각각의 페이지에서 xpath 를 따왔고, 주기적으로 그 텍스트를 ..

    (백준/Kotlin) 1764번 : 듣보잡

    난이도: Silver 4 프로그래밍 언어: Kotlin 문제명: 듣보잡 푼일자: 2022년 1월 주소: https://www.acmicpc.net/problem/1764 문제풀기 fun main() = with(System.`in`.bufferedReader()) { val set = mutableSetOf() val list = mutableListOf() val (N, M) = readLine().split(' ').map { it.toInt() } repeat(N) { set.add(readLine()) } repeat(M) { val s = readLine() if (set.contains(s)) list.add(s) } val sb = StringBuilder().appendLine(list.s..

    (백준/Kotlin) 1302번 : 베스트셀러

    난이도: Silver 4 프로그래밍 언어: Kotlin 문제명: 베스트셀러 푼일자: 2022년 1월 주소: https://www.acmicpc.net/problem/1302 문제풀기 fun main() = with(System.`in`.bufferedReader()) { val map = mutableMapOf() repeat(readLine().toInt()) { val book = readLine() map[book] = (map[book] ?: 0) + 1 } print(map.toSortedMap().maxByOrNull { it.value }!!.key) }

    (백준/Kotlin) 6588번 : 골드바흐의 추측

    난이도: Silver 1 프로그래밍 언어: Kotlin 문제명: 패션왕 신해빈 푼일자: 2022년 1월 주소: https://www.acmicpc.net/problem/6588 문제풀기 fun main() = with(System.`in`.bufferedReader()) { val sb = StringBuilder() val prime = BooleanArray(1000001) for (i in 2..1000000) if (!prime[i]) for (j in i * 2..1000000 step(i)) prime[j] = true while (true) { val n = readLine().toInt() var exists = false if (n == 0) break for (i in 3..n) if ..

    (백준/Kotlin) 9375번 : 패션왕 신해빈

    난이도: Silver 3 프로그래밍 언어: Kotlin 문제명: 패션왕 신해빈 푼일자: 2022년 1월 주소: https://www.acmicpc.net/problem/9375 문제풀기 split 부분을 StringTokenizer 로 대체하면 시간이 많이 줄어드니 해당 방법도 좋습니다. import java.util.* fun main() = with(System.`in`.bufferedReader()) { val sb = StringBuilder() repeat(readLine().toInt()) { _ -> val map = HashMap() repeat (readLine().toInt()) { val kind = readLine().split(' ')[1] map[kind] = if (map.co..