Swift

enum 남용 주의

Phililip
728x90

 

이번 글은 enum을 남용하는 경우에 대해 알아볼게요.

 


 

 

Swift의 enum은 많은 기능을 제공하기 때문에 남용될 수 있습니다.

 

Swift의 enum은 computed property라는 것을 제공하기 때문에 아래 같은 코드를 짜는 경우가 많습니다.

 

 

enum Style {
    case headline
    case bodyText
    case emphasis

    var isBold: Boolean {           // computed property - 값을 계산해서 return
        switch self {
            case .headLine, .emphasis: return true
            case .bodyText: return false
        }
    }

    var fontSize: CGFloat {
        switch self {
            case .headline: return 20
            case .bodyText, .emphasis: return 16
        }
    }
}

 

 

enum의 뽕맛을 맛본 사람은 위와 같은 스타일의 코드를 많이 쓰지만,

 

enum을 남용한다면, case 추가/수정이 있을 경우에는 computed property들도 수정이 필요하게 되고 코드 가독성도 떨어질 수 있습니다.

 

 

 

이게 무슨 말인고.....

 

 

 

이번에는 struct 구조로 위 코드와 같은 동작을 수행하도록 구현해볼게요.

 

struct Style {
    var isBold: Bool
    var fontSize: CGFloat

    static let headline = Style(isBold: true, fontSize: 20)
    static let bodyText = Style(isBold: false, fontSize: 16)
    static let emphasis = Style(isBold: true, fontSize: 16)
}

 

 

오히려 struct를 사용했을 때, 가독성이 뛰어나고

(headline, bodyText, emphasis가 각각 어떤 값을 가지고 있을지 바로 보이죠???)

 

case 추가/수정이 자유로운 경우가 있습니다.

(static 프로퍼티 하나 추가/수정하면 끝이니까요!!)

 

 

물론 아닌 사람도 있을 수 있지만, 최소한 가독성을 추구하는 저로서는 동의하게 되네요ㅎㅎ

 

 

 

 

결론은 뭐냐!!

 

enum이 나쁘다는게 절대 아니구요

 

뭐든지 과하면 안 좋다는 말이 있는 것처럼, 그때그때 상황에 맞춰서 enum이든 struct든 적절하게 사용하는 것이 가장 좋다!! 입니다ㅎㅎ

 

 

## 참고

 

https://5sw.de/2022/01/enum-or-struct/

반응형