ํ๋กํผํฐ ์ต์ ๋ฒ
didSet๊ณผ willSet
ํ๋กํผํฐ ์ต์ ๋ฒ
- ๋ณ์์ ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ ์ํ์ฌ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ณ , ๋ฏธ๋ฆฌ ๊ตฌํํ ์ฝ๋๋ก ์ด์ ๋์ํ ์ ์๋ค.
- ๋ค์ ๋งํ๋ฉด ํด๋น ํ๋กํผํฐ๋ฅผ ๊ด์ฐฐ(observe)ํ๋ฉด์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๋ ์คํ๋๋ค.
- willSet๋ณด๋ค๋ didSet์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
- willSet๊ณผ didSet์ ๋ ๋ค ์์ฑํ์ ๊ฒฝ์ฐ willSet์ด ๋จผ์ ์คํ๋๋ค.
- ์ถ๊ฐํ ์์๋ ๊ฒฝ์ฐ
- ์ ์ฅ ํ๋กํผํฐ(stored property)
- ์ฐ์ฐ ํ๋กํผํฐ(computed property)
didSet
- didSet์ ์ ๊ฐ์ด ์ ์ฅ๋ ์งํ์ ํธ์ถ๋๋ค.
- ์ด์ ํ๋กํผํฐ์ ๊ฐ์ด oldValue ๋ก ์ ๊ณต๋๋ค.
willSet
- willSet์ ๊ฐ์ด ์ ์ฅ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
- ์๋ก์ด ํ๋กํผํฐ์ ๊ฐ์ด newValue ๋ก ์ ๊ณต๋๋ค.
var myProperty: Int = 20{
didSet(oldVal){
//myProperty์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์งํ์ ํธ์ถ, oldVal์ ๋ณ๊ฒฝ ์ myProperty์ ๊ฐ
}
willSet(newVal){
//myProperty์ ๊ฐ์ด ๋ณ๊ฒฝ๋๊ธฐ ์ง์ ์ ํธ์ถ, newVal์ ๋ณ๊ฒฝ ๋ ์๋ก์ด ๊ฐ
}
}
var name: String = "Unknown" {
willSet {
print("ํ์ฌ ์ด๋ฆ = \(name), ๋ฐ๋ ์ด๋ฆ = \(newValue)")
}
didSet {
print("ํ์ฌ ์ด๋ฆ = \(name), ๋ฐ๋๊ธฐ ์ ์ด๋ฆ = \(oldValue)")
}
}
name = "Peter"
// willSet์ด ๋จผ์ ์คํ๋จ
// ํ์ฌ ์ด๋ฆ = Unknown, ๋ฐ๋ ์ด๋ฆ = Peter
// ํ์ฌ ์ด๋ฆ = Peter, ๋ฐ๋๊ธฐ ์ ์ด๋ฆ = Unknown
class UserAccount {
var username: String // username, password๋ผ๋ ์ ์ฅ ํ๋กํผํฐ
var password: String
var loginAttempts: Int = 0 {
didSet {
if loginAttempts >= 3 {
print("๋ก๊ทธ์ธ ์๋๊ฐ 3ํ ์ด์ ์คํจํ์์ต๋๋ค. ๊ณ์ ์ด ์ ๊ฒผ์ต๋๋ค.")
lockAccount()
}
}
}
var isLocked: Bool = false {
didSet {
if isLocked {
print("๊ณ์ ์ด ์ ๊ฒผ์ต๋๋ค.")
} else {
print("๊ณ์ ์ด ์ ๊ธ ํด์ ๋์์ต๋๋ค.")
}
}
}
init(username: String, password: String) {
self.username = username
self.password = password
}
func login(with enteredPassword: String) {
if enteredPassword == password {
print("๋ก๊ทธ์ธ ์ฑ๊ณต!")
loginAttempts = 0 // ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ๋ก๊ทธ์ธ ์๋ ํ์ ์ด๊ธฐํ
} else {
print("์๋ชป๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.")
loginAttempts += 1 // ๋ก๊ทธ์ธ ์คํจ ์ ๋ก๊ทธ์ธ ์๋ ํ์ ์ฆ๊ฐ
}
}
private func lockAccount() {
isLocked = true // isLocked:์ ๊ทธ๋ ํ๋กํผํฐ
}
func unlockAccount() {
isLocked = false
}
}
// ์ฌ์ฉ์ ๊ณ์ ์์ฑ
let user = UserAccount(username: "user123", password: "password123")
// ๋ก๊ทธ์ธ ์๋
user.login(with: "wrongpassword")
// ์ถ๋ ฅ:
// ์๋ชป๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.
user.login(with: "wrongpassword")
// ์ถ๋ ฅ:
// ์๋ชป๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.
user.login(with: "wrongpassword")
// ์ถ๋ ฅ:
// ์๋ชป๋ ๋น๋ฐ๋ฒํธ์
๋๋ค.
// ๋ก๊ทธ์ธ ์๋๊ฐ 3ํ ์ด์ ์คํจํ์์ต๋๋ค. ๊ณ์ ์ด ์ ๊ฒผ์ต๋๋ค.
// ๊ณ์ ์ด ์ ๊ฒผ์ต๋๋ค.
// ๊ณ์ ์ ๊ธ ํด์
user.unlockAccount() // ๊ณ์ ์ด ์ ๊ธ ํด์ ๋์์ต๋๋ค.
'๐ Today I Learned > Swift ๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ ๊ทผ ์ ํ์ (0) | 2023.12.11 |
---|---|
[Swift] ํ์ ์บ์คํ (0) | 2023.12.11 |
[Swift] ์ด๊ธฐํ (0) | 2023.12.07 |
[Swift] ์์ (0) | 2023.12.07 |
[Swift] ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ (0) | 2023.12.07 |