이동식 저장소

[Kotlin] sealed class vs. enum class 본문

Primary/Kotlin

[Kotlin] sealed class vs. enum class

해스끼 2022. 7. 7. 14:14

Kotlin을 처음 배울 때는 ``enum class``와 ``sealed class``를 혼동하곤 했다. 

 

enum을 구현할 떄 ``enum class`` 대신 ``sealed class``를 써도 되지 않나?

결론

``sealed class``를 써도 되지만, 바람직한 사용법은 아니다.

왜?

``enum class``가 왜 적합한지는 설명 안 해도 되겠지? 이제 ``sealed class``의 바람직한 사용 예시를 설명하려 한다.

 

``sealed class``는 클래스가 정의된 블럭 안에서만 상속될 수 있으며, 외부에서의 상속을 허용하지 않는다.

sealed class Animal {
    // Animal은 이 안에서만 상속될 수 있다.
    class Cat: Animal
    class Dog: Animal
}

// ERROR: 여기서는 상속될 수 없다. 
class Salmon: Animal

위의 예시처럼 말 그대로 ``Animal``이 선언된 블럭 안에서만 상속될 수 있다.

 

``sealed class``을 사용하면 ``나만 상속받을 수 있는`` 클래스를 작성할 수 있다. 상속을 통해 깔끔한 코드를 작성하는 동시에 외부에서 건드릴 수 없는 클래스 위계를 구현하는 것이다.

 

enum을 구현하는 데 쓰기에는 너무 심오한 개념이지 않은가? 아니라고? 아님 말고..

참고

 

[Kotlin] sealed class

가위바위보에서 낼 수 있는 선택지는 가위, 바위, 보 3개뿐이다. 따라서 가위바위보의 참가자들은 다른 선택지를 내지 말아야 한다. 현실에서는 상대방의 강력한 항의와 눈초리를 통해 제한되지

thinking-face.tistory.com

 

Comments