본문 바로가기

📚 Kotlin9

[TCP Socket 통신] Okio 라이브러리를 이용한 kotlin socket 통신 io stream 과 socket 을 이용한 tcp 통신은 java 를 처음 공부할 때, 간단하게 멀티 스레드 채팅 정도의 예제로 이해하며 넘어갔다.. 웬만한 클라이언트 - 서버 간의 통신은 http 로 이루어지므로 이를 더 깊게 파며 공부했었다. 이번에 이직한 회사에서 본격적으로 맡게 된 첫 과제는 TCP 전문 통신을 구축하는 것이다. 소켓 통신을 구현하는데, java socket api 를 이용하여 순수 구현할 수 있지만, kotlin 에서는 okio 라는 통신 전용 라이브러리가 있다고 해서 이를 한번 사용해서 전문 통신을 위한 소켓 클라이언트 초석을 구현해봤다. 잘 해보지 않은 socket 통신을 이해하고 구현하며 이틀간 많이 고통 받았고, 그 과정에서 좀 더 편리한 kotlin okio 라이브러리.. 2023. 6. 24.
[Effective Kotlin] 아이템 49. 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라 코틀린도 마찬가지로 Collection 처리를 위한 다양한 함수를 지원한다. 대표적으로 iterable 에서도 filter, map 등 동일한 함수를 지원하면서, 편리하게 사용할 수 있다. 하지만 지연 연산을 위해서는 자바와 같은 Stream, 코틀린에서는 Sequence를 사용하는 것이 좋다고 한다. 정리해보자. Iterable과 Sequence public inline fun Iterable.filter( predicate: (T) -> Boolean ): List { return filterTo(ArrayList(), predicate) } public fun Sequence.filter( predicate: (T) -> Boolean ): Sequence { return FilteringSeque.. 2023. 2. 4.
[Effective Kotlin] 아이템 47. 인라인 클래스의 사용을 고려하라 이펙티브 코틀린을 거의 다 읽어 간다. 이펙티브 자바나 코틀린이나 백엔드에서 API를 설계하는 것 뿐만 아니라 특정 분야의 사용에 국한되지 않고, 언어 자체를 어떤식으로 작성해야 하는지를 알려주는 책이다. 나는 코틀린으로 라이브러리를 만들고 있지 않기 때문에, 백엔드 개발에 필요한 부분을 따로 되새기고자 특정 유용한 아이템들만 블로그에 정리한다. 따로 글로 정리하지 않은 나머지 챕터는 읽어가며 코틀린에 대해 더 깊은 이해를 하려 노력한다. Inline 한정자가 참 많이 나왔는데, 거의 고차 함수나 탑 레벨 함수에 많이 사용하는 것으로 학습했다. 성능적 부분에서 객체를 따로 생성하지 않고 함수 내부로 편입되기에 우수하므로, 인상 깊은 개념이었다. 톱레벨 함수나 고차 함수를 유틸리티 함수를 제외하면 Inli.. 2023. 2. 3.
[Effective Kotlin] 아이템 36. 상속보다는 컴포지션을 사용하라 [이펙티브 자바] 를 읽었던 기억을 떠올렸을 때 '상속보다는 컴포지션을 사용하라' 라는 아이템이 상당히 인상 깊었다. 하지만 컴포지션 적용시키면서 다형성을 만족시키려면 인터페이스를 상속 받아야 하는데, 모두 구현해야 하므로 코드가 참 더러워지는 것을 확인할 수 있었다. 코틀린을 이를 기가 막히게 해결했다. 다시 상속과 컴포지션의 예를 살펴보고 이를 코틀린이 어떻게 간단히 해결할 수 있는지 살펴 보자. 상속의 문제점 모든 것을 가져올 수밖에 없음 슈퍼클래스의 상태, 메서드, 행위 등 모든 것을 가져온다. 계층 구조를 나타낼 때 굉장히 좋은 도구 그렇기에 일부분만을 사용하기에 부적합한 방법 이를 위해서 컴포지션을 사용한다. 캡슐화를 깨는 상속 내부적인 구현 방법의 변경으로 캡슐화가 깨진다. 컴포지션 슈퍼클래.. 2023. 1. 30.
[Effective Kotlin] 아이템 32. 생성자 대신 팩토리 함수를 사용하라 자바를 공부하며 가장 의미 있게 읽은 책은 [이펙티브 자바]이다. 자바를 만든 개발자가 직접 집필한 책이므로, 자바를 자바답게 사용하는 방법이 아주 명확하게 설명되어 있다. 가장 첫 챕터인 '생성자 대신 팩토리 메소드를 사용하라'라는 아이템을 굉장히 의미 있게 읽게 되었고, 그 내용을 코드를 작성할 때 애용했었다. 코틀린도 자바의 이점을 그대로 가져간 언어이므로, 비슷하게 적용 되는 부분이 있을지를 생각해 봤다. 회사에 들어가서 코틀린을 배우고 코드를 작성하면서, 가장 눈에 띄었던 부분이 dto 객체를 매핑하는 부분이었고, 팩토리 메서드를 사용하면 어떨까라는 생각을 했다. 코틀린을 사용하는 분들과 구글링을 통해 자바와 동일하게 팩토리 메서드를 많이들 사용한다는 정보를 얻었고, 그대로 적용했었다. 이펙티브.. 2023. 1. 29.
[Effective kotlin] 아이템 27. 변화로부터 코드를 보호하려면 추상화를 사용하라 자바를 공부하며 객체지향을 제대로 공부하기 시작했고, 객체지향의 4대 특성 중 '추상화'의 참된 의미를 알기까지 시간이 걸렸다. 결론은 많이 공부하고 생각하며 확장하고 적용해 봐야 그 의미를 비로소 이해하리라 생각한다. 상수 const val NAME_PREFIX = "prefix" fun getName() : String = NAME_PREFIX + this.name 가장 간단한 추상화 방법이다. 본 코드에서 String 리터럴 값을 따로 빼서 상수화를 시키면 이해도 쉬울 뿐 아니라. 변경하기도 훨씬 수월하다. 리터럴 값에 의미 있는 이름을 붙일 수 있고, 변경이 쉽다. 함수 특정 행위를 함수로 선언하면, 재사용이 가능하다. 코틀린에서는 간단히 확장 함수를 만들어서 여러 곳에서 재사용할 수 있어, 추상.. 2023. 1. 29.
[Effective Kotlin] 아이템 24. 제네릭 타입과 variance 한정자를 활용하라 자바를 공부하고 적용하면서 추상화를 하기 위해 인터페이스를 적극 활용했었고, 강타입 언어였기에 특히 타입을 잘 활용했어야 했다. 그 과정에서 제네릭을 다시 한번 공부하게 되었고, 공변, 반공변 성 등의 특징을 제네릭이 어떻게 풀어냈는지 공부했다. extend, super 등의 한정자를 사용하여 타입을 적절히 제어했었던 기억이 있다. 코틀린도 마찬가지로 제네릭의 한정자를 제공한다. 자바의 결함을 개선하면서 말이지. Out 한정자 파라미터를 공변으로 만든다. class University open class Student class FreshMan : Student() fun main(args: Array) { val b: University = University() // OK val a: Universi.. 2023. 1. 27.
[Effective Kotlin] 아이템 23. 타입 파라미터의 섀도잉을 피하라 섀도잉이란 무엇인가? class Person(val name : String) { fun addPerson(name : String) { // ... } } addPerson() 함수의 파라미터가 Person class의 프로터티 이름과 같아진다. 외부 스코프의 프로퍼티를 가리게 되는 경우를 섀도잉이라 한다. 이를 개발자가 알아차리기 힘든 경우가 생긴다. 타입 파라미터에서도 문제가 생긴다. interface Payment class KakaoPay: Payment class NaverPay: Payment class PaymentHistory { fun addPayment(payment: T) { // ... } } 이러한 경우는 PaymentHistory의 제네릭 타입과 addPayment()의 타입 .. 2023. 1. 25.
[감상문] Kotlin In Action을 읽고 현재 입사한 회사에서 백엔드 언어는 코틀린 기반이다. 코틀린에 빠르게 적응해야 했기에, 입사 전 부터 틈틈히 개념을 공부했었다. 하지만 구글과 유튜브는 정보의 난잡함과 한계, 그리고 신뢰성이 떨어진다. 확실히 언어 및 백엔드 공부는 책이 진리라는 것이 내 정론이다..ㅎㅎ 입사 첫 날 사수 분께 코틀린 관련 서적이 있는지 여쭤봤고, 감사하게도 흔쾌히 [코틀린 인 액션] 책을 빌려주셨다. 책을 들고 퇴근했고, 그 날 밤부터 바로 읽기 시작했다. 일이 많은 날, 너무 피곤한 날과 일정이 있는 날을 제외한 밤 11시에는 1시간 꼭 독서를 하고 자자는 다짐과 함께. 잘 읽히지 않을 것을 염려했지만, 다행히 이 책이 지향하고자 하는 바는 기존 자바 개발자에게 초점이 맞춰져 있는 것이 참 인상 깊었다. 책은 기존 자.. 2023. 1. 17.
반응형