Kotlin

    [Kotlin] Kotlin의 sealed interface란 무엇인가?

    sealed class의 한계와 sealed interface의 등장sealed class는 클래스를 상속하는 서브 클래스를 컴파일러에서 알 수 있도록 하기 위해 만들어졌다. 아래의 UIState와 같은 간단한 상속구조라면 sealed class로도 충분하다. sealed class UIState() data object Loading : UIState() data class Success(val data: UIData) : UIState() data class Error(val error: Exception) : UIState()하지만, sealed class를 사용하면, 다른 클래스들이 둘 이상의 sealed class를 상속받지 못하게 되는 한계가 있다. 예를 들어 다음과 같은 코드를 만들어보자.s..

    [Kotlin] 스마트 캐스트(Smart Cast) 기능을 사용한 안전한 타입 변환: is, as

    Java에서 안전한 타입 변환을 위해 선택했던 방법 서버와의 HTTP 통신을 통해 응답을 받아오기 위해 다음과 같은 Response 인터페이스를 상속하는 간단한 클래스 Success와 Fail을 만들었다고 해보자. sealed interface Response data class Success(val responseBody: String) : Response data class Fail(val errorMessage: String) : Response 기존 자바에서는 안전하게 타입을 변환하기 위해 타입을 변환하기 전에 instanceof 함수를 통해 타입을 체크한 후 다시 타입 변환을 해서 메서드를 호출해야 했다. public class ResponseMain { public static void mai..

    [Kotlin] Exception과 Error의 차이는 무엇일까?

    이번 글에서 다룰 내용 Kotlin에서 코드를 보다 보면, 어떤 코드는 예외 발생 상황에서 Exception을 던지고 어떤 코드는 Error을 던진다. 이번 글에서는 이 둘의 차이에 대해서 다뤄보고자 한다. Kotlin의 Exception과 Error의 차이 Kotlin에서의 예외 처리는 기본적으로 Java 기반의 예외 처리 체계를 따른다. @SinceKotlin("1.1") public actual typealias Error = java.lang.Error @SinceKotlin("1.1") public actual typealias Exception = java.lang.Exception 따라서 이 둘의 차이를 이해하기 위해서는 해당 Java 소스를 확인할 필요가 있다. 소스를 확인하면서 둘의 차이..

    [Kotlin] fun interface와 SAM(Single Abstract Method) 한 번에 정리하기

    SAM(Single Abstract Method) 인터페이스란? SAM 인터페이스는 이름 그대로, 하나의 추상 메서드만을 가진 인터페이스이다. 예를 들어 다음과 같이 SAMSample 인터페이스를 만들고 내부에 foo 함수 하나만을 넣는다면, 이것은 SAM 인터페이스가 된다. fun interface SAMSample { fun foo() } *Kotlin 1.4 이후부터는 SAM 인터페이스를 사용하기 위해서는 fun interface 키워드를 사용해야 한다. *Kotlin 1.4부터는 Java의 SAM 인터페이스에 대해 자동으로 SAM 변환을 지원한다. SAM 인터페이스가 중요한 이유는 이러한 SAM 인터페이스는 Kotlin의 함수형 프로그래밍을 깔끔하게 만들어주는 역할을 하기 때문이다. 기본적으로 인..

    삽입 정렬(Insertion Sort) 알고리즘 한 번에 정리하기 : Kotlin으로 삽입 정렬 직접 구현해보기

    삽입 정렬 알고리즘 이란 무엇인가? 삽입 정렬(Insertion Sort)은 배열의 각 원소를 해당 원소의 앞쪽에 있는 정렬된 배열의 적절한 위치에 삽입하는 방식으로 작동하는 배열이다. 각 원소가 삽입될 때 앞쪽 배열의 정렬된 위치에 들어가서 앞쪽 배열은 무조건 모두 정렬된 상태라는 것을 이용한 알고리즘이다. 예를 들어 아래와 같은 배열이 있을 때 둘째 원소부터 삽입 정렬을 수행한다고 하자. 둘째 원소는 첫 원소의 앞에 삽입된다. 그러면 아래와 같은 형태의 배열이 나오고 포인터를 다음으로 이동시켰을 때 앞쪽 배열([4, 5])은 모두 정렬되어 있는 것을 볼 수 있다. 이를 남은 원소인 6, 2, 1에 대해서 마저 수행하면 정렬이 완료된다. 삽입 정렬에서 특정 값을 특정 위치에 삽입하기 위한 알고리즘 배열..