-
Kotlin inner class VS sealed class카테고리 없음 2024. 6. 4. 10:24
inner class
와sealed 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
는 제한된 클래스 계층 구조가 필요한 경우에 적합합니다.