티스토리 뷰

반응형

Kotlin 에는 Sealed class 라는 것이 있습니다. 이 Selaed 클래스를 Enum과 같이 사용하는 경우가 많은데요. 이 Sealed Class 를 Enum 대체로 작성하는 것이 옳은 것인지 이해 못하고 사용 하는 분들도 많은거 같습니다.  
이번 포스트에서는 Sealead Class 에 대한 개념과 Enum  클래스의 개념을 정의하고 어떻게 사용하면 좋을지 이야기 해보겠습니다.

 


 

Sealed Class 넌 뭐니?

 

Sealed 라는 영단어의 뜻을 알면 Sealed Class 에 대해서 이해하기 도움이 될 것입니다. Sealed 는 봉인된 이라는 의미를 갖고 있는데 이 단어의 뜻과 같이 Sealed Class 클래스는 다른 클래스에서 상속하거나 확장할 수 없습니다. 즉, Sealed Class 에서는 SubClass를 생성할 수 없습니다. 이는 일반적으로 클래스 작성자가 추가적인 상속을 방지하고 특정한 디자인 선택이나 제한을 강제하기 위해 선택합니다.

예를 들어, Kotlin 에서는 다음과 같이 정의할 수 있습니다.

sealed class SealedClass
{
    // 클래스 멤버와 메서드
}

 


 

Selaed Class 의 장단점이 무엇일까?

 

Sealed 클래스의 장점
    - 명확하고 엄격한 디자인 결정을 제공하여 의도하지 않은 상속을 방지합니다.
    - 일부 상황에서 성능 이점을 제공할 수 있습니다. 컴파일러가 더 많은 최적화를 수행할 수 있습니다.

Sealed 클래스의 단점
    - 상속을 통한 코드 재사용이 불가능합니다.
    - 특정 디자인 패턴에 대한 제약을 가질 수 있습니다.

 


 

우리가 알고 있는 Enum (열거형)

 

`Enum(열거형)`은 프로그래밍에서 사용되는 데이터 형식으로, 특정 도메인과 관련된 상수 값들의 집합을 나타냅니다. Enum은 일련의 상수 값을 정의하고 각 값은 상징적인 이름과 연결됩니다. Enum은 특정한 관련된 값들의 고정된 집합이 있을 때 코드를 더 읽기 쉽고 유지 보수하기 좋게 만드는데 유용합니다.

예를 들어, Java에서 이렇개 코드가 구성될 수 있습니다.

enum DaysOfWeek
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

 

 

Enum의 장점

- 상수 값에 의미 있는 이름을 제공하여 코드의 가독성을 향상시킵니다.
- 기본 타입을 직접 사용하는 것보다 오류 가능성이 낮아집니다.
- 코드의 구조와 유지 보수성을 높여줍니다.

Enum의 단점
- Enum 값은 컴파일 시간에 고정되므로 동적인 값 집합에는 다른 데이터 구조보다 덜 유연합니다.
- Enum 값은 런타임에서 확장하거나 수정할 수 없습니다.

 

요약하면, `sealed` 클래스는 상속을 제한하여 클래스가 더 이상 확장되지 않도록 하며, `enum`은 고정된 상수 값들의 집합에 대해 이름을 정의하는 데 사용됩니다. 두 개념은 객체 지향 프로그래밍에서 각기 다른 용도로 사용되며 서로 다른 역할을 수행합니다.


 

마무리


`sealed` 클래스와 `enum` 클래스의 장단점을 알아봤습니다. kotlin 으로 작성된 코드라고 enum을 대신하기 위해서 selaed 클래스 사용하는 것은 지양해야합니다. 상속과 확장을 막기 위해서 sealed 클래스를 사용해야하며, 열거형으로 사용하기 위해서는 enum 클래스를 사용할 것을 권장합니다.

`enum class` 사용하는 것은 무겁다라고 말하는 개발자도 있습니다. enum class는 타입 안전성과 스코프 제약을 통한 명시적 설계를 제공하는 대신, 약간의 성능 및 메모리 오버헤드가 있을 수 있으며, 이를 "무겁다"고 표현하는 경우가 있습니다. 그러나 이러한 오버헤드는 일반적으로 매우 미미하며, 대다수의 경우 무시할 수 있을 정도로 열거형을 사용할 때는 `enum class` 를 사용해도 메모리에 크게 영향은 없을것으로 보입니다.

 

한줄요약
`sealed class` : 확장하지 않을 봉인할 class 구성 시 사용 할 것
`enum class` 열거형 표현 할 때 사용 할 것

 


 

참고 및 도움 준 사이트


* https://velog.io/@stn/Kotlin-Sealed-Classes-VS-Enum-Classes-VS-Sealed-Inferfaces
* CHAT GTP

 

- 상수 값에 의미 있는 이름을 제공하여 코드의 가독성을 향상시킵니다.
- 기본 타입을 직접 사용하는 것보다 오류 가능성이 낮아집니다.
- 코드의 구조와 유지 보수성을 높여줍니다.

반응형
댓글