다음은 SwiftUI 에서 사용했던 일부 코드입니다.
...
VStack {
TextField("이메일", text: $email, prompt: Placeholder.email)
...
}
이 코드에서 Placeholder 의 email 이라는, String 값은 다음과 같이 선언되어있기에 사용할 수 있는 것이다.
enum Placeholder {
static let email: String = "이메일을 입력해주세요."
static let password: String = "비밀번호를 입력해주세요."
}
이렇게 관련된 상수들을 모아둔 곳을 Namespace 라고 부른다.
그렇다면, 나는 왜 enum 과 static 프로퍼티를 사용했을까?
구조체를 사용하거나, enum 에서 case 를 사용하면 문제가 있나?
struct Placeholder {
static let email: String = "이메일을 입력해주세요."
static let password: String = "비밀번호를 입력해주세요."
}
다음과 같이 만든다면, let placeholder = Placeholder()
처럼 인스턴스화 할 수 있게 된다.
물론 init() 에 접근 제한자를 걸어서 제한 할 수 있지만, 애초에 enum 을 사용하면 그럴 일이 생기지 않는다.
enum Placeholder: String {
case email = "이메일을 입력해주세요."
case password = "비밀번호를 입력해주세요."
}
case 를 사용하는 경우에 String 타입만 가질 수 있다는 단점과,
매번 .rawValue
를 코드에 추가해줘야 하는 불편함을 겪게 되기도 합니다.
또한, case 가 선언된 enum 은 rawValue 를 사용하면, 구조체로 선언했을 때와 동일하게 인스턴스화 할 수 있게 된다는 단점도 존재한다.