Kotlin

개발/Kotlin

[이펙티브 코틀린] 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라

이펙티브 코틀린은 자주 찾아 꺼내보는 책이라 기억은 안 나지만, 아마 3회독째인 것 같다.Java에서 Kotin으로 넘어오는 과정에서 빠르게 습득한 빈약한 지식을 기반으로, 코드를 관습적으로 작성하는 경향이 있었다고 생각해서 그걸 개선하기 위해서 꾸준히 읽고 있다.왜 어떤 주제는 포스팅하고, 어떤 주제는 포스팅하지 않나요? 라고 묻는다면, 내 코드를 실질적으로 개선할 수 있는 깨달음을 준 챕터들에 대해서만 작성하고 싶기 때문이다. 함수 타입 파라미터코틀린은 다중 패러다임 언어이다. 그 중에서 함수형 패러다임의 핵심 개념 중 하나가 "고차 함수"이다.고차 함수는 함수를 인자로 받거나 함수를 반환하는 함수를 말한다. 오늘 포스팅에서는 그 중 "함수를 인자로 받는" 경우에 대해 inline 한정자를 붙이면 어..

개발/Kotlin

[이펙티브 코틀린] 가변성을 제한하라

가변성을 활용하면 변동성이 큰 데이터에 대해 명시적이고 단순하게 처리를 할 수 있다.기존 객체를 복사하지 않고 직접 변경함으로써 불변 객체에 비해 메모리 할당이나 복사에 드는 오버헤드가 적다는 장점 또한 존재한다. 하지만 간혹 코드를 짜다보면, 가변성이 굴린 스노우볼로 인해 트러블슈팅에 애먹었던 경험들이 있을 것이다. 가변성의 이점을 취하기 위해 우리가 간과할 수 있는 문제점이 뭘까?가변성이 가지는 문제점코틀린의 구성요소들 중 일부는 상태를 가질 수 있도록 설계되어 있으며, 그 중 우리가 가장 자주 사용하게 되는 건 가변 프로퍼티나 MutableList, MutableSet, MutableMap 등이 있다.사용자는 이를 통해 가변성을 활용할 수 있는데, 여기서 문제는 이 가변성을 어떻게 활용하느냐에 따라..

개발/Kotlin

참조 객체로 GC에 관여하기 (feat.WeakReference)

JVM의 GC는 heap 영역의 객체들 중에서 가비지(더 이상 참조되지 않는 객체)를 찾아 처리함으로써 할당했던 메모리를 회수하는 역할을 한다.하지만 GC는 메모리 관리의 일관성과 안정성을 보장하기 위해 외부의 영향을 최대한 제한하는 구조로 설계되어, java.lang.ref 패키지의 참조 객체 관련 요소들로만 GC에 제한적으로 어필이 가능하다.기본적인 참조 방식인 "강한 참조"는 별도의 클래스로 제공되지 않으며, 특수한 참조 방식인 Phantom/Soft/Weak Reference가 존재하는 것을 볼 수 있다. 우리는 이 참조 방식들을 사용해서 GC의 동작에 제한적이나마 관여할 수 있게 된다. 1. Garbage Collector가 참조를 처리하는 방법GC는 가비지를 찾아 처리하고 메모리를 회수하는 목..

개발/Kotlin

[Kotlin] sealed class, enum class 바이트 코드 뜯어보기

오늘 포스팅 주제는 Kotlin의 유용한 기능인 sealed와 enum이다.둘 다 컴파일 타임에 타입 집합이 결정되어 타입 안전하고 when문을 exhaustive하게 함으로써 경우에 따른 명확한 처리 구문을 작성할 수 있도록 도와준다.오늘은 이 두 개념들의 역할을 넘어, 컴파일되었을 때의 차이점과 그로 인해 고려할 수 있는 것들에 대해 얘기해보고자 한다.1. sealed class코틀린의 sealed class는 모듈/패키지 외부에서 해당 클래스를 상속할 수 없도록 상속 가능 범위를 제한해서 클래스 계층 구조를 타입 안전하게 제공한다. 주로 여러 상태를 한가지 타입으로 다룸으로써 when문에서 모든 케이스를 명시적으로 처리하기 위해 사용된다.sealed class의 모든 하위 클래스는 컴파일 타임에 검..

개발/Kotlin

[Kotlin] 예외 처리 - 예상한 예상 밖의 결과

1.Throwable과 Exception, ErrorThrowable은 예외와 오류의 최상위 클래스이다.예외와 오류의 차이점은 복구 가능성으로, 예외에 대해서는 개발자가 적절한 처리를 통해 정상적인 실행을 유지할 수 있으나 오류는 그렇지 않다. 이 때문에 이 둘을 구분하여 개발자가 핸들링할 수 없는 오류에 대해서는 처리를 하지 않도록 설계되었다. 2. Kotlin에는 checked exception이 없다Java에서는 RuntimeException의 서브클래스가 아닌 Exception들을 checked exception이라 부르며, 이에 대한 처리를 컴파일러 수준에서 강제한다. 하지만 Kotlin은 Jvm 기반으로 설계되었음에도 checked exception을 지원하지 않는데, 그 이유가 뭘까?💡Ko..

개발/Kotlin

[이펙티브 코틀린] 프로퍼티는 동작이 아니라 상태를 나타내야 한다

Java를 사용하다 Kotlin으로 넘어오면서 많은 사람들은 Kotlin의 프로퍼티가 Java의 필드와 비슷하다고 느낀다.하지만 사실 이 둘은 전혀 다른 개념인데, 이펙티브 코틀린에서 이를 자세히 설명하고 있다. 1. 프로퍼티와 필드// Kotlin 프로퍼티var name: String = "왜?"// Java 필드String name = null; 프로퍼티와 필드 둘 모두 데이터를 저장한다는 공통점이 있지만, Kotlin의 프로퍼티는 더 많은 기능을 제공한다.가변 프로퍼티에는 자동으로 getter/setter를 가진다. 기본적 캡슐화가 되어있다.Java에서는 lombok 같은 라이브러리를 사용하여 어노테이션으로 지정해줘야 했던 것에 비교하면 사용자 편의성이 굉장히 높다. 또한 가변 프로퍼티는 사용자 정..

개발/Android

[안드로이드] Gson에서 Moshi로 마이그레이션하기

✔️ Gson을 Moshi로 마이그레이션하기로 결정한 이유지금까지 Json 직렬화 라이브러리로 Gson을 사용해 왔는데, 되돌아보니 Gson을 선택한 이유가 없었다.그냥 다들 Gson을 사용한다니까 사용했던 것 같아서, 다른 라이브러리들과의 비교를 통해 Moshi로 마이그레이션 하기로 결정했다.Gson / Moshi / Jackson을 비교했고, 그 중에서 (1) Kotlin 호환성 (2) 라이브러리 지속성 (3) 런타임 퍼포먼스위 세 가지를 주요 비교점으로 두었다.Retrofit의 개발사인 Square사의 라이브러리이며, 셋 중 Kotiln 호환성이 가장 뛰어나고, 런타임 퍼포먼스가 높은 Moshi로 결정하게 되었다. ✔️ Moshi 란?Square에서 개발한 경량 Json 라이브러리이다.Kotlin ..

개발/Kotlin

[Kotlin] 타입 소거와 Star projection

✔️ 제네릭은 Java 5에서 처음으로 도입된 개념이다.제네릭은 코드의 재사용성 증가와 그 과정에서 컴파일 타임에 코드의 안전성을 확보하기 위한 도구이다. 하지만Java는 초기 개발 단계에서 제네릭을 고려하지 않았다.제네릭 도입 전의 컬렉션은 타입 안전성을 제공하지 않았기 때문에 런타임 에러(ClassCastException) 발생 위험이 높았는데, 이후 제네릭이 도입되면서 기존의 컬렉션 클래스와 인터페이스를 타입 안전하게 만들기 위해 제네릭 타입 파라미터를 추가하게 된다. 제네릭은 코드의 재사용성 증가와 그 과정에서 컴파일 타임에 코드의 안전성을 확보하기 위한 도구이다. 그로 인해 제네릭이 없던 버전의 코드와 제네릭이 도입된 이후의 코드의 호환성을 유지해야 하는 문제가 발생하게 되는데, 여기서 오늘의 ..

일상/이직 과정 기록

(2) 카카오뱅크 안드로이드 하이라이트 채용 후기 - 1차 면접

1. 면접 준비 전나는 기술 면접 경험이 한 번도 없다. 신입으로 취업할 때에는 바로 실무에서 배우면서 성장하고 싶은 욕심에 기술 면접이라고 하기 애매한 간단한 면접을 보고 전 직장에 취업했었다. 근데 첫 기술 면접이 카카오뱅크라니.. 설레면서도 엄청난 부담감이 밀려왔었다. 주변에는 온통 백엔드 개발자들 뿐이라 검색을 통해 찾은 래퍼런스들 밖에 없어서 올바른 전략을 세우지 못했다ㅠㅠ 지금 생각해보면 당연한 게, CS 공부는 평상시에 꾸준히 했어야 했고 알고리즘 공부 또한 매주 1-2개씩이라도 꾸준히 했어야 했다. 하지만 난 새로운 프로젝트에 처음 사용해보는 구조, 기술들을 적용해야 했기에 직전 일년 간에는 그런 준비보다는 실무적인 부분에 무게를 뒀으므로 이 부분은 나의 실책이라고 생각한다. CS, 알고리..

일상/이직 과정 기록

(1) 카카오뱅크 안드로이드 하이라이트 채용 후기 - 사전 과제

1. 서류 합격퇴사 직후에 반신반의하며 서류를 제출했고, 당연히 서류 탈락할 거라 생각해서 여행 계획을 짜며 시간을 보내고 있었다. 근데 서류 합격? 신기하고 새로운 도전이라는 생각에 두근두근하기도 했다. 5월 5일에 제출했고, 5월 10일에 서류 합격 메일이 도착했다. 문자로도 왔다는데, 스팸 차단 앱이 필터링해버려서 난 뒤늦게 확인했다 ㅠㅠ2. 사전 과제 전형안드로이드는 백엔드 직군과는 다르게 사전 과제 전형이다. 코테 연습은 작년에 하다 새로운 프로젝트 들어가면서 멈춰있던 상태라, 나에게는 천만다행이였다 ㅠㅠ 사전 과제는 5월 11일 오전 10:00 ~ 5월 16일 오후 11:59 까지 진행되었는데, 석가탄신일이 끼어있어서 하루가 늘어난 것으로 보인다. 다른 포스팅들을 보면 과제 전형에 보통 5일을..

로키입니다
'Kotlin' 태그의 글 목록