코틀린
-
인터페이스와 제네릭을 이용한 공통 로직 관리Java & Kotlin 2024. 1. 1. 23:08
1) 서론 하나의 저울로 모든 종류의 물질들을 측정할 수 있을까요? 요리를 할 때 그램 단위의 정밀한 측정이 필요할 때는 미세한 측정이 가능한 요리용 저울이 필요할 것입니다. 하지만 사람의 몸무게를 측정할 때는 당연히 큰 저울이 필요합니다. 미세한 그램 단위까지 알 필요도 없는데요. 만약 건축 자재와 같이 큰 것들은 더더욱 다른 저울로 측정되어야 할 것입니다. 하지만 만약에 요리할 때 사용하면서, 내 몸무게와 코끼리의 몸무게도 재려고 한다면 세 개의 저울이 필요할 것입니다. 저울 한 개가 모든 용도에 맞게 사용되면 아주 간편할 것 같은데요. 결국 '무게 측정 행위'는 동일한 것 같습니다. 개발에서도 마찬가지입니다. 여러 도메인 혹은 비즈니스 로직에서 동일한 로직을 사용한다면, 공통화하고 싶은 욕구가 생깁..
-
UTF-8, EUC-KR 인코딩 파일 읽어들이기Java & Kotlin 2023. 9. 3. 23:45
1) 서론 파일을 읽고, 쓰는 레거시 로직이 있었습니다. 파일을 읽는 데에는 아무런 문제가 없었으나 정작 나가는 패킷에서는 알 수 없는 문자가 추가되어 나갔습니다. 파일을 받는 쪽에서도 대부분의 문자는 정상이었지만, 중간중간 깨지는 문자들이 존재했습니다. 이러한 문제를 해결하며 확인한 것을 기록하니다. 2) UTF-8 인코딩 파일 읽어들이기 // 생성된 파일 읽기 $ cat test-encoding-utf8.txt 안녕하세요. 저는 현재 테스트 중 입니다. // 파일 인코딩 확인 $file -I test-encoding-utf8.txt test-encoding-utf8.txt: text/plain; charset=utf-8 UTF-8 인코딩 된 텍스트 파일이 존재합니다 FileReader 사용하여 UTF..
-
Kotlin Coroutine과 CompletableFutureJava & Kotlin 2023. 7. 27. 02:42
1) 서론 혹시 비슷한 일들을 두고 다른 점을 찾기 어려웠던 경험이 있으신가요? 무언가 다르다고 주장하며 존재하지만 자신이 볼 때는 똑같다고 생각이 들 수도 있는데요. 저는 유독 안심, 등심 돈가스의 차이점에 대해서 공감하지 못했습니다. 안심 돈까스는 지방이 포함되어 부드럽고, 등심 돈가스는 좀 더 쫄깃한 식감을 느낄 수 있다고 하는데요. 실제로 매장에서도 다르게 판매하고 있지만 개인적으로는 똑같이 돼지고기를 튀긴 돈가스라고 생각했습니다. 우연히 모 돈까스 가게를 방문하고 등심+안심이 함께 나오는 세트를 주문했는데요. 평소의 궁금증을 해소하고자 실험정신을 발휘하여 번갈아가며 먹어봤습니다. 막상 진지하게 번갈아먹어 보니 확실히 안심이 더 부드러웠는데요. 이처럼 겉모습만 보거나, 깊게 알지 못하는 비슷한 일..
-
Kotlin coroutine dispatcher란?Java & Kotlin 2023. 6. 26. 00:28
1) 코루틴과 쓰레드는 달라요 코루틴(CoRoutine)과 쓰레드(Thread)는 매우 비슷해 보이는데요. 코틀린 프로그래밍을 하면서 무언가 동시적인(concurrency) 작업을 처리하기 위해서 자주 사용되기 때문일 것 같습니다. 쓰레드는 프로세스를 이루는 가장 작은 단위의 흐름입니다. 예를 들어 일정 간격으로 자동 저장되는 메모장 프로세스가 실행된다고 가정합니다. 타이핑을 치면서 I/O를 담당하고, 일정 간격을 확인하며 저장하는 쓰레드는 다를 것입니다. 즉 하나의 프로세스에 여러 개의 쓰레드가 동작하고 있다고 생각할 수 있습니다. 코루틴은 일시 정지, 재개할 수 있는 함수입니다. 즉 쓰레드처럼 프로세스를 구성하는 일꾼이 아닌, 하나의 함수일 뿐입니다. 그리고 코루틴은 단순히 하나의 쓰레드에서만 이루어..
-
코틀린 setter, 어디까지 써봤니?Java & Kotlin 2023. 5. 30. 01:46
1) 서론 혹시 이도저도 못 하는 경험을 해보신 적 있으신가요? 저는 식당에서 메뉴를 고르는 것을 어려워하는데요. 특히 중국집에서 절정에 다다릅니다. 짜장면을 시키면, 매콤한 짬뽕국물이 먹고 싶어 집니다. 하지만 짬뽕을 시켰을 때 너무 매우면 어쩌지 하며, 짜장면이 먹고 싶기도 합니다. 그러면서 볶음밥을 먹는 게 더 좋지 않을까 고민합니다. 중요한 것은 무엇을 먹든 trade-off가 존재합니다. 짜장면을 먹으면 매운 것을 피할 수 있지만 국물을 포기해야 합니다. 개발에서도 마찬가지인데요. 이번에 코틀린으로 개발하며 entity를 만드는데 고민이 들었습니다. 자바에서 lombok @getter + priavte 필드로 생성하던 것을 코틀린에서는 어떤 방식이 좋을지 고민됐습니다. 이번 글에서는 위의 문제에..