개발자의 생활

sealed class 본문

kotlin

sealed class

Developer성현 2025. 9. 16. 00:18

1. 소개

sealed class는 사실 abstract와 동일한 기능입니다. 다만 한 가지 추가된 제약기능이 있습니다.

abstract 는 모든 파일에서 상속받아 사용할 수 있지만 sealed class는 해당 클래스가 위치한 파일 내에서만 상속을 받을 수 있고 외부에서는 접근 제체가 불가능합니다.

 

사실 이 설명만으로도 sealed class에 대한 설명은 다 했습니다.

하지만 그래도 실제로 코드를 한번 보고 abstract 와의 추가적인 차이점을 직접 보여드리겠습니다.

그리고 사실 거의 동일하다고 했지만 성격은 조금 다릅니다.

 

2. 사용법

sealed class MySealed(
    var num: Int
){
    abstract fun countUp()
    abstract fun countDown()
}

class MyTest : MySealed(1){
    override fun countUp() {
        super.num++
    }

    override fun countDown() {
        super.num--
    }
}

 

이것이 sealed class 를 사용해서 일반 클래스가 상속받아 추상메서드를 구현하고 있습니다.

그러면 abstract와 비교해 보겠습니다.

 

abstract class MyAbstract(
    var num: Int
){
    abstract fun countUp()
    abstract fun countDown()
}

class MyTest2 : MyAbstract(1){
    override fun countUp() {
        super.num++
    }

    override fun countDown() {
        super.num--
    }
}

 

코드도 거의 동일하고 기능구현 도 완전히 동일합니다.

 

3. 특성

상속받는 클래스의 필드가 없다면 object 타입으로 변환을 요구합니다.

물론 요구만 하기 때문에 바꾸지 않아도 문제가 되지는 않습니다. 다만 변환을 요구하는 이유는 필드가 없다면 어떤 인스턴스를 만들던 동일한 인스턴스가 되기 때문에 object 를 사용해서 싱글턴 패턴으로 생성하는 것을 권장하고 있는 것입니다.

4. 특성 및 장점

  • 처음 소개에서 말씀드린 대로 sealed class는 자신이 위치 해 있는 파일 내에서만 자신을 상속받을 수 있도록 제한하고 있어서 이를통해 가독성과 유지보수성을 높일 수 있습니다.
  • sealed class 는 enum class와 마찬가지로 when 문과 함께 사용하면 모든 조건을 빠지지 않고 검사가 가능하며 else 통해 예외를 처리하지 않아도 됩니다.

'kotlin' 카테고리의 다른 글

coroutine(코루틴)  (0) 2026.02.11
[ kotlin ] 자료구조_Stack, Queue, Deque  (0) 2025.10.23
Enum Class  (0) 2025.09.14
data class  (2) 2025.09.12
중첩 클래스, 내부클래스  (0) 2025.09.08