코틀린 클래스 생성자와 기본값 코틀린에서는 클래스의 생성자에 기본값을 설정하는 것이 허용된다. 예를 들어 우리가 일반적인 메모장을 위한 클래스를 만든다고 해보자. 이 메모장에는 제목(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 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를 상속받지 못하게 되는 한계가 있다. 예를 들어 다음과 같은 코드를 만들어보자..
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에서의 예외 처리는 기본적으로 Java 기반의 예외 처리 체계를 따른다. @SinceKotlin("1.1") public actual typealias Error = java.lang.Error @SinceKotlin("1.1") public actual typealias Exception = java.lang.Exception 따라서 이 둘의 차이를 이해하기 위해서는 해당 Java 소스를 확인할 필요가 있다. 소스를 확인하면서 둘의 차이..
오류 메세지와 원인 분석 안드로이드 API33부터 onBackPressed 함수가 Deprecated 되면서 함수를 override하면 다음과 같은 경고 메세지가 뜨고 있다. 'onBackPressed(): Unit' is deprecated. Overrides deprecated member in 'androidx.core.app.ComponentActivity 직역하면 다음과 같은 뜻이다. 'onBackPressed(): Unit'은 더 이상 사용되지 않습니다. 'androidx.core.app.ComponentActivity'에서 더 이상 사용되지 않는 메서드를 재정의합니다. 당분간은 메세지가 뜬 상태로 있겠지만, 향후 몇 버전 뒤에는 코드가 없어질 것이므로, 이 글에서는 onBackPressed를..