본문 바로가기

전체 글55

(Kotlin) sealed class 1. sealed class 보통 여러 자식 클래스들이 하나의 부모 클래스를 상속하게 되면 컴파일러는 상속하는 자식 클래스가 어떤 클래스인지 모른다. Kotlin의 sealed class는 부모 클래스를 상속하는 자식 클래스의 종류를 제한하는 특성을 갖는 클래스이다. 또한, sealed class는 같은 패키지에 존재하는 자식 클래스만 상속할 수 있다. 즉, sealed class를 사용하게 되면 동일 파일에 정의되어 있는 자식 클래스 외에 다른 어떤 클래스도 존재하지 않는다는 것을 명시적으로 컴파일러에 알려 컴파일 에러를 없에게 된다. UI의 상태를 관리하는 클래스를 만든다고 가정해보자. abstract class UiState class Loading : UiState class Running : U.. 2022. 7. 27.
(Kotlin) open class, abstract class Java에는 final이라는 키워드가 있다. final로 선언된 클래스와 메소드는 기본적으로 상속과 오버로드가 제한된다. 즉, 자식 클래스에서 이 클래스나 메소드를 재정의하려 할 때 컴파일 에러를 발생시키게 된다. final로 선언한다는 의미는 명시적으로 Override Method를 제한하고 싶을 때 사용할 수 있다. Kotlin은 어떨까? Kotlin의 클래스와 메소드는 기본적으로 final이다. 하지만, 우리는 다양한 이유로 클래스나 메소드를 상속하여 개발해야 하는 상황이 존재한다. 이를 위해, Kotlin은 상속에 사용되는 몇가지 키워드를 제공하고 있다. 1. open class open class Shape class Rectangle(var height: Double, var length: D.. 2022. 7. 27.
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 최근 프로젝트를 진행하면서 네트워크 통신을 위해 Retrofit2 라이브러리와 비동기 처리를 지원하는 Coroutine을 함께 사용하는 경우가 많아지고 있다. 통신 후 받아오는 response의 status가 오직 200인 경우에는 크게 상관없지만 현재 진행 중인 프로젝트에서는 200, 401, 409 등 다양한 status의 response가 상황에 따라 넘어오게 된다. 이번 포스팅은 다양한 HTTP Status 처리를 위해 리팩토링 도중 마주친 에러에 대한 포스팅이다. 1. 기존 코드 다양한 status 처리를 위해 ResultWrapper라는 sealed class를 사용하여 통신이 성공적 (Success)인지, 네트워크 통신 에러 (NetworkError)인지, 일반적인 status 에러 (Gen.. 2022. 3. 14.
[ViewModel] ViewModel 시작하기 1. ViewModel 개요 ViewModel은 수명주기를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었다. 특히, 화면 회전과 같은 구성 변경에도 데이터 유지가 가능하다. 1.1. 기존의 단점들 단순한 데이터의 경우 Activity는 onSavedState()를 사용해 onCreate()의 Bundle에서 데이터를 복원할 수 있었다. 하지만, 이 경우는 Bitmap과 같은 대량의 데이터에는 적합하지 않다. View에서는 비동기 호출을 자주 한다. View는 비동기 호출을 관리하며 많은 유지관리가 필요하고, 화면 회전과 같은 구성 변경 시 개체가 다시 생성되는 경우 이미 수행한 호출을 다시 호출하기 때문에 리소스 낭비가 생기게 된다. View는 UI 표시, 사용자 상호작용, 권한 요청과 같은 .. 2022. 3. 11.