ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin inner class VS sealed class
    카테고리 없음 2024. 6. 4. 10:24

    inner classsealed class는 Kotlin에서 각각 다른 목적과 사용 사례를 가지고 있습니다. 이 둘의 차이를 명확히 이해하는 것이 중요합니다. 아래에 그 차이점을 설명하겠습니다.

    Inner Class

    정의

    • inner class는 외부 클래스의 인스턴스에 대한 참조를 유지하는 내부 클래스입니다. 외부 클래스와 밀접한 관계가 있는 클래스 로직을 정의할 때 사용됩니다.

    사용 예시

    class Outer {
        private val bar: Int = 1
    
        inner class Inner {
            fun foo() = bar
        }
    }
    
    fun main() {
        val outer = Outer()
        val inner = outer.Inner()
        println(inner.foo()) // 출력: 1
    }

    특징

    • inner class는 외부 클래스의 멤버에 접근할 수 있습니다.
    • 외부 클래스의 인스턴스에 대한 참조를 유지합니다.
    • 주로 외부 클래스의 컨텍스트를 필요로 하는 로직을 캡슐화할 때 사용됩니다.

    Sealed Class

    정의

    • sealed class는 특정 상위 클래스의 하위 클래스 집합을 제한하는 클래스입니다. 상위 클래스가 sealed이면 그 하위 클래스는 같은 파일 내에서만 정의될 수 있습니다.

    사용 예시

    sealed class Result {
        data class Success(val data: String) : Result()
        data class Failure(val error: Throwable) : Result()
        object Loading : Result()
    }
    
    fun handleResult(result: Result) {
        when (result) {
            is Result.Success -> println("Success: ${result.data}")
            is Result.Failure -> println("Failure: ${result.error.message}")
            Result.Loading -> println("Loading")
        }
    }

    특징

    • sealed class는 클래스 계층을 제한하고, 고정된 수의 하위 클래스를 가질 수 있습니다.
    • 컴파일러가 when 식에서 모든 가능한 하위 클래스를 검사할 수 있게 해줍니다.
    • 주로 상태나 결과의 표현 등 고정된 계층 구조가 필요한 경우에 사용됩니다.

    주요 차이점 요약

    특징 Inner Class Sealed Class
    목적 외부 클래스의 상태/동작과 밀접한 로직 캡슐화 고정된 계층 구조를 가진 클래스 계층 정의
    외부 클래스 접근 외부 클래스의 멤버에 접근 가능 외부 클래스와 독립적
    하위 클래스 정의 외부 클래스 내에서 정의 같은 파일 내에서 정의
    사용 사례 외부 클래스의 컨텍스트가 필요한 경우 상태나 결과 표현 등 고정된 계층 구조 필요 시

    결론

    • 종속성 여부: inner class는 외부 클래스의 인스턴스에 대한 종속성을 가지고 있으며, 외부 클래스의 멤버에 접근할 수 있습니다. sealed class는 외부 클래스와 독립적으로 동작하며, 고정된 하위 클래스 집합을 정의하는 데 사용됩니다.
    • 사용 목적: inner class는 외부 클래스와 밀접한 관계를 가진 로직을 구현할 때 유용합니다. sealed class는 상태나 결과를 표현하는 등 고정된 클래스 계층 구조를 정의할 때 유용합니다.

    이러한 특성으로 인해, inner class는 외부 클래스의 컨텍스트를 필요로 하는 경우에 사용하고, sealed class는 제한된 클래스 계층 구조가 필요한 경우에 적합합니다.

Designed by Tistory.