Kotlin/Class and Interface

    코틀린에서 @JvmOverloads 를 사용해 생성자 오버로딩하기 : 오버로딩이 필요한 경우 한 번에 정리하기

    코틀린 클래스 생성자와 기본값 코틀린에서는 클래스의 생성자에 기본값을 설정하는 것이 허용된다. 예를 들어 우리가 일반적인 메모장을 위한 클래스를 만든다고 해보자. 이 메모장에는 제목(title), 부제목(subTitle), 내용(content)이 들어가며 이를 표현하는 Memo 클래스는 다음과 같이 만들 수 있다. class Memo(val title: String, val subTitle: String = "", val content: String = "") 이렇게 만들어진 Memo 클래스는 다음과 같이 초기화가 가능하다. fun main() { val memo = Memo("dummy title") } 그러면 이 메모 객체는 title 필드에만 dummy title이라는 값이 들어가고 나머지 필드에는..

    [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를 상속받지 못하게 되는 한계가 있다. 예를 들어 다음과 같은 코드를 만들어보자..

    [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] 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의 함수형 프로그래밍을 깔끔하게 만들어주는 역할을 하기 때문이다. 기본적으로 인..

    Kotlin object의 초기화 시점과 companion object의 초기화 시점 차이 알아보기

    object와 companion object의 초기화 시점 object는 싱글톤 인스턴스를 간편하게 만들기 위해 Kotlin에서 제공해주는 방법이다. object를 작성하면 싱글톤 패턴을 구현하기 위한 긴 코드를 작성할 필요 없이 쉽게 싱글턴 객체를 만들 수 있다. companion object 또한 클래스에 종속된 정적인(static) 값들을 만드는데 사용되며 여러번 생성되는 것이 아닌 한 번만 생성되는 싱글턴 패턴을 가진다. 하지만 Kotlin에서 object와 companion object는 서로 다른 초기화 시점을 갖는다. 이번 글에서는 각각의 초기화 시점에 대해 알아보려고 한다. object의 초기화 시점 object는 실제로 사용 될 때까지 초기화가 지연된다. 이에 대한 것은 공식 문서에 다음..