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든 적절하게 사용하는 것이 가장 좋다!! 입니다ㅎㅎ
## 참고
반응형
'Swift' 카테고리의 다른 글
CryptoKit을 사용한 암호화 (0) | 2022.02.23 |
---|---|
async/await 용 public API를 추가할 때 고려사항 (1) | 2022.02.23 |
Core Data의 not Optional 설정 시 크래쉬 주의 (0) | 2022.02.20 |
Literal 이란? (1) | 2022.02.07 |
Swift 인스턴스 method 목록 가져오는 방법 (0) | 2022.02.06 |