카테고리 없음

swift 옵저버에 대해 알아보자

kingarthur 2024. 6. 9. 19:52

오늘의 공부는 옵저버에 대해 간략히 알아보는 것이다.

스타를 하다보면 옵저버로 적 기지를 관찰한다.

즉 여기서도 비슷하다. 항상 다른 함수를 관찰하다가

필요하면 자기가 바로 실행하는 함수를 옵저버라 하는 것 같다.

맞는지는 모르겠지만 

 

옵저버 역활을 해주는 willSet , didSet 있다. 

윌 셋은 현재에서 바뀔 것을 명명해주고 

디드 셋은 현재에서 과거꺼를 데려오는 역활을 하는 것 같다

아래 코드 예제문을 보면 알 수 있다.

var name : String = "unknown" {
    willSet {
        print("현재 이름 \(name), 바뀔 이름\(newValue)")
    }
    didSet {
        print("현재 이름 \(name), 바뀔 이름 \(oldValue)")
    }
}

name = "Peter"

처음 선언에는 언노운으로 이름이 없다

하지만 마지막에 피터로 이름을 선정했다 

프린트 하게 되면 

현재 이름 unknown, 바뀔 이름Peter

현재 이름 Peter, 바뀔 이름 unknown 이렇게 나올 것이다. 

 

두번째 디드 셋으로 비밀번호가 틀릴 경우 락이 잡기는 걸 구현해 보았다. 

class UserAccount {
    var username: String
    var password: String
    var loginAttempts: Int = 0 {
        didSet {
            if loginAttempts >= 3 {
                print("로그인 시도가 3회 이상 실패하였습니다. 계정이 잠겼습니다.")
            }
        }
    }
    
    var isLocked: Bool = false {
        didSet {
            if isLocked {
                print("계정이 잠겼습니다")
            } else {
                print("계정이 잠금 해제되었습니다")
            }
        }
    }
    
    init(username: String, password: String) {
        self.username = username
        self.password = password
    }
    
    func login(with enterID: String , enterdPassword: String) {
        if enterID == username && enterdPassword == password {
            print("로그인 성공!")
            loginAttempts = 0
        } else {
            print("잘 못된 아이디 또는 비밀번호 입니다.")
            loginAttempts += 1
        }
    }
    
    private func lockAccount() {
        isLocked = true
    }
    
    func unlockAccount() {
        isLocked = false
    }
}

let user = UserAccount(username: "123", password: "123")

user.login(with: "13", enterdPassword: "123")

user.login(with: "1", enterdPassword: "12")

user.login(with: "3", enterdPassword: "2")

user.unlockAccount()

3번 틀리면 아이디가 락이 잠기도록 되어있다. did set 보고 있다가 딱 역활을 수행한다. 

그래서 옵저버라고 명칭하는 것 같다. 

오늘도 하나 배웠다.