์๋ ํ์ธ์! ๊ฐ์์ ๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ํ๋กํผํฐ ์ต์ ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ ๊ฒ์! ๊ทธ๋ผ go!!
ํ๋กํผํฐ ์ต์ ๋ฒ(Property Observer) ๋?
ํ๋กํผํฐ ๊ฐ์ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ์ผ๋ก, "์ ์ฅ ํ๋กํผํฐ"์ ์ถ๊ฐํ ์ ์๋ค. (์ ์ฅํ๋กํผํฐ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ์ฌ๊ธฐ click!) ์ ๊ฐ์ ์์ฑ์ด ํ์ฌ ๊ฐ๊ณผ ๋์ผํ๋๋ผ๋ ์์ฑ ๊ฐ์ด ์ค์ ๋๋ฉด ํธ์ถ ๋๋ค.
์ฆ, ํ๋กํผํฐ ์ต์ ๋ฒ๋ ๊ด์ฐฐ์! ๋ผ๋ ๋ป์ธ๋ฐ, ๊ฐ๋ฐ์๊ฐ ๊ด์ฐฐํ๋ ํ๋กํผํฐ์ ๋๊ฐ ๊ฐ์ ์ค์ ํ๋ ค๊ณ ํ๋ฉด ๋ณ๊ฒฝ ๊ฐ์ง๋ฅผ ํ๋ฉด์ ํ๋กํผํฐ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ค๊ณ ํ๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
ํ๋กํผํฐ ์ต์ ๋ฒ์ ์ต์
ํ๋กํผํฐ ์ต์ ๋ฒ์๋ ๋ ๊ฐ์ง ์ต์ ์ด ์๋ค.
1) willSet: ๊ฐ์ด ์ ์ฅ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค.
willSet์ต์ ๋ฒ๋ฅผ ๊ตฌํํ๋ฉด, ๊ฐ์ด ์ ์ฅ๋๊ธฐ ์ง์ ์ ์๋ก ์ ์ฅ๋ ๊ฐ์ด 'ํ๋ผ๋ฏธํฐ'๋ก ์ ๋ฌ๋๋ค. ์ด๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง, ํ๋ผ๋ฏธํฐ ์ด๋ฆ๊ณผ ๊ดํธ๋ฅผ ๋ฐ๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ newValue๋ก ์๋ ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ํํ๋ ์๋์ ๊ฐ๋ค.
var name: String = 'name' {
willSet(newName) {
print("ํ์ฌ์ด๋ฆ = \(name), ๋ฐ๊พผ์ด๋ฆ = \(newName)")
}
}
newName ์ด๋ผ๊ณ ๋ด๊ฐ ์ง์ ํด์ฃผ์์ง๋ง, ์ด๊ฑธ ์ง์ ํ์ง ์์ผ๋ฉด newValue ํ๋ผ๋ฏธํฐ๋ก ์ ๊ทผํ ์ ์๋ค. ๊ทธ ์ฝ๋๋ ์๋์์ ํ์ธํด๋ณด์.
var name: String = "unknown" {
willSet {
print("ํ์ฌ์ด๋ฆ = \(name), ๋ฐ๊พผ์ด๋ฆ = \(newValue)")
}
}
์ด๋ ๊ฒ willSet ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์์ฑํ๋ฉด, ํ๋กํผํฐ๋ฅผ ๋ฐ๊ฟ๋ ์๋ํ๋ค๊ณ ํ๋ค. ์๋์ ๊ฐ์ด name์ ๋ฐ๊พธ๊ฒ ๋ ๋ ํ๋กํผํฐ ์ต์ ๋ฒ๋ก ์ธํด์ ๋ด๊ฐ print๋ก ์ค์ ํด๋์ ๊ตฌ๋ฌธ์ด ์ถ๋ ฅ๋๋ค.
name = "potato"
//prints (ํ์ฌ์ด๋ฆ = unknown, ๋ฐ๊พผ์ด๋ฆ = potato")
2) didSet: ์ ๊ฐ์ด ์ ์ฅ๋ ์งํ์ ํธ์ถ๋๋ค.
didSet ์ต์ ๋ฒ๋ฅผ ๊ตฌํํ๋ฉด, ๊ฐ์ด ์ ์ฅ๋ ์งํ์ ์ด์ ํ๋กํผํฐ์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋๋ค. ์ด๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง, ํ๋ผ๋ฏธํฐ ์ด๋ฆ๊ณผ ๊ดํธ๋ฅผ ๋ฐ๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ์๋ oldValue๋ฅผ ์ฌ์ฉํ๋ค. ๊ธฐ๋ณธํํ๋ ์๋์ ๊ฐ๋ค.
var name: String = "unknown"{
didSet(oldName) {
print(ํ์ฌ์ด๋ฆ = \(name), ๋ฐ๊พผ์ด๋ฆ = \(oldName)")
}
}
์ด๊ฒ๋ ์์์ ๋ดค๋ willSet๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก oldName์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ฃผ์ง ์์๋, ๋ฐ๋ก oldName์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
didSet๋ ์ค์ name์ด๋ผ๋ ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ๋ ์งํ์ ํธ์ถ๋๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ์์์ ๋ดค๋ ๊ฒ์ฒ๋ผ, name์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด, ๋ฐ๋ก ๊ฐ์ด๋ณ๊ฒฝ๋ ์งํ์ ์คํ๋๋ค. ํ์ง๋ง, ๋ณ๊ฒฝ๋ ์งํ๋ผ ํ์ฌ์ด๋ฆ์ธ name์๋ ๋ฐ๋์ด์ง ์ด๋ฆ์ด ๋ค์ด๊ฐ ์๊ณ , oldName์๋ ๋ฐ๋ก ์ง์ ์ ๋ฐ๊พธ๊ธฐ ์ ์ ์ด๋ฆ์ด ๋ค์ด๊ฐ๋ค.
name = "potato"
//prints (ํ์ฌ์ด๋ฆ = potato, ๋ฐ๊พผ์ด๋ฆ = unknown")
3) willSet๊ณผ didSet ํจ๊ป ๊ตฌํํ๊ธฐ
var name: String = "unknown" {
willSet {
print("ํ์ฌ์ด๋ฆ = \(name), ๋ฐ๊พผ์ด๋ฆ = \(newValue)")
}
didSet {
print("ํ์ฌ์ด๋ฆ = \(name), ๋ฐ๊พธ๊ธฐ ์ ์ด๋ฆ = \(oldValue)")
}
}
ํจ๊ป ๊ตฌํํ๊ฒ ๋๋ฉด ์ฝ๋ ์คํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- willSet ๋จผ์ ์คํ
- ์ ์ฅ ํ๋กํผํฐ name ๊ฐ ๋ณ๊ฒฝ
- didSet ์ในํ
์ง๊ธ๊น์ง ์ด๋ ๊ฒ ํ๋กํผํฐ ์ต์ ๋ฒ์ ๋ํด์ ์์๋ดค๋๋ฐ, ์ ์๊ณ ์์ผ๋ฉด ๋์ค์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ฑฐ๋ ๋ฐ๋ ๊ฐ์ด ๋ฌด์์ผ์ง ํ์ธํด์ผํ๋ ๊ณผ์ ์ด ์๊ธธ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
'Swift > Swift BASIC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - assert (0) | 2022.01.19 |
---|---|
[Swift] ํ์ ์บ์คํ (Type casting) (0) | 2022.01.19 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ์์ (Inheritance) - sub class, super class๋? (0) | 2022.01.17 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ํ๋กํผํฐ(property) (0) | 2022.01.17 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ์ด๊ธฐํ ๊ตฌ๋ฌธ init / ์๋ฉธ์ deinit ์ด๋? (0) | 2022.01.17 |