-
Swift Enum - 3Programming/Swift(iOS) 2021. 4. 1. 21:15728x90
이번에는 enum을 가지고 struct나 class를 대체하는 것을 공유하려고 합니다.
아래 두 struct를 보면, 중복된 속성이 존재합니다.
struct User { let email:String let password:String let joinDate:Date var level:Int var exp:Int } struct Admin { let email:String let password:String let joinDate:Date var logs:[String] }
중복된 속성을 해결하려면 어떻게 해야될까요?
클래스의 상속을 이용하면 부모클래스에 공통 속성을 두고, 자식 클래스에서 사용하면 됩니다.
하지만 부모 클래스에 변경이 있을 때 자식 클래스에서도 변경을 해줘야 되므로 기존 설계 구조를 계속 변경해줘야합니다.
그리고 자식 클래스에서 자기가 가진 프로퍼티를 먼저 초기화 후에 부모 클래스의 init을 호출 해줘야합니다.
enum을 이용하면 상속을 대체할 수 있습니다.
연관 타입을 이용하는 것입니다.
장점은 새로운 유형을 추가 할때 코드의 구조적 변경이 필요하지 않다. 구조체를 활용 가능하다.
단점은 중복된 코드가 많이 나온다. 중복된 코드를 별도로 캡슐화 하는것이 불가능하다. 다형성을 구현하기 위해서는 분기문 추가 처리가 필요하다.
struct User { let email:String let password:String let joinDate:Date var level:Int var exp:Int } struct Admin { let email:String let password:String let joinDate:Date var logs:[String] } enum Account { case user(User) case admin(Admin) case guest(Guest) func display() { switch self { case let .user(user): print(user) case let .admin(admin): print(admin) //case let .guest(guest): // print(guest) } } } let arr:[Account] = [ .user(User(email:"123@gmail.com", password:"qwe", joinDate:Date(), level:1, exp:1000)), .admin(Admin(email: "456@gmail.com", password: "asd", joinDate: Date(), logs: [])), ] for e in arr { e.display() }
만약 Guest라는 타입이 추가된다면, case에 분기만 추가하면 됩니다.
'Programming > Swift(iOS)' 카테고리의 다른 글
Swift Property - 1 (0) 2021.04.01 Swift Enum - 4 (0) 2021.04.01 Swift Enum - 2 (0) 2021.04.01 Swift Enum - 1 (0) 2021.04.01 Swift Tuple (0) 2021.04.01