마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

enum과 sealed

0 추천

상수를 활용해야하는 일이 생겨서

 

enum 클래스와 sealed 클래스 간에 고민이 되는데요..

 

when 절과 같은 상황에서 쓰려고 합니다..

 

enum을 쓸바에는 무조건 sealed 클래스가 낫나요..?

 

----

 

sealed class (정확히는 sealed interface)

sealed interface BodyPart {
    open val name: String

    fun getPart() = name

    class Chest : BodyPart {
        override val name = "가슴"
    }
    
    class Back : BodyPart {
        override val name = "등"
    }

    class Leg : BodyPart {
        override val name = "하체"
    }
    class Shoulder : BodyPart {
        override val name = "어깨"
    }

    class Biceps : BodyPart {
        override val name = "이두"
    }
    
    class Triceps : BodyPart {
        override val name = "삼두"
    }
    
    class Abs : BodyPart {
        override val name = "복근"
    }
}

 

 

enum class

enum class BodyType(val part: String) {
    CHEST("가슴"),
    BACK("등"),
    LEG("하체"),
    SHOULDER("어깨"),
    BICEPS("이두"),
    TRICEPS("삼두"),
    ABS("복근");

    fun getPartName() = part
}

 

 

대충 이런식으로 구현할건데.. 어느것을 사용하는것이 더 낫나요?

when 같은곳에서 selaed 클래스를 사용하면 알아서 when 절에 타입이 있나 없나 확인해줘서 안정성 측면에서 더 좋다고 듣긴했습니다..

 

그리고 when 절뿐만아니라 bundle 에 이 데이터 타입을 넣어서 전송도 해줄 예정입니다.

지금은 String으로만 해주고있어요

codeslave (3,940 포인트) 님이 2022년 5월 26일 질문
codeslave님이 2022년 5월 26일 수정

1개의 답변

0 추천
 
채택된 답변

둘다 상관은 없어 보이구요. 추가적인 함수등이 필요하지 않고 단순히 타입을 구분하기 위한 목적이거나 enum.values()같이 enumeration 기능이 필요하다면 enum이 좀 더 적합해 보입니다. 그리고 님의 경우에 sealed class는

sealed class BodyPart(val partName: String) { 
    object Chest : BodyPart ("가슴")
    object Back : BodyPart ("등")
     ...
}

위처럼 object를 사용해서 좀 더 간결한 형태로 사용할 수도 있을 것 같습니다.

spark (227,470 포인트) 님이 2022년 5월 26일 답변
spark님이 2022년 5월 29일 수정
getPartName() 함수 대신 property를 바로 사용해도 될 것 같네요.
...