티스토리 뷰
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
- 상수 값에 의미 있는 이름을 제공하여 코드의 가독성을 향상시킵니다.
- 기본 타입을 직접 사용하는 것보다 오류 가능성이 낮아집니다.
- 코드의 구조와 유지 보수성을 높여줍니다.
'프로그래밍 > Android' 카테고리의 다른 글
[Android] 클린아키텍처에 대해서 살짝 맛보기 (4) | 2024.10.29 |
---|---|
센서의 정확도 올리는 방법 (0) | 2024.08.27 |
Data Binding 사용법 (0) | 2024.08.26 |
Moshi & Retrofit 을 활용한 Dynamic JSON 직렬화 하는 방법 (0) | 2024.05.17 |
GitHub Copilot 사용해보기 (0) | 2024.04.20 |
- RXjava
- Android
- DI
- MCC
- 알고리즘
- 패턴
- IT
- 코틀린
- 선교
- issue
- IOS
- 임용고시
- swift
- Kotlin
- missionchina
- flutter
- 점수판
- 디자인패턴
- 스코어헬퍼
- 고시문
- java
- 미션차이나센터
- view
- 안드로이드
- 탁구
- 고시문헬퍼
- missioon
- Android Studio
- push
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |