ํฐ์คํ ๋ฆฌ ๋ทฐ
[iOS/Swift] ํ๋กํผํฐ(Properties) ์์๋ณด๊ธฐ(์ฐ์ฐ ํ๋กํผํฐ) - (2/3)
Neoguri๐ฆ 2022. 6. 1. 10:30
์๋ ํ์ธ์?
๋๊ตฌ๋ฆฌ์ ๋๋ค~~
์ ๋ฒ ์๊ฐ์๋ ์ ์ฅ ํ๋กํผํฐ(Stored Properties)์ ๋ํด ์์๋ณด์๋๋ฐ์.
ํน์ ๋ชจ๋ฅด์๋ ๋ถ์ด ์๋ค๋ฉด ์ด์ ํฌ์คํ ์ ๋ณด๊ณ ์์ฃผ์ธ์!!
์ค๋์ ์ฐ์ฐ ํ๋กํผํฐ(Computed Properties)์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ฐ ํ๋กํผํฐ(Computed Properties)
์ฌ๋ฌ๋ถ ์ฝ๋ฉํ์๋ค๊ฐ
์ด๋ค ์ฝ๋ ๋ธ๋ญ์์ get, set ์ด๋ ๊ฒ ๋ถ์ด ์๋๊ฒ์ ๋ณด์ จ์ํ ๋ฐ์?(์๋ง...ใ )
๊ทธ๋ฐ ์ ๋ค์ด ์ฐ์ฐ ํ๋กํผํฐ์์!!
์ฐ์ฐ ํ๋กํผํฐ์ ๋ํด ์ ๋ณด๋ฅผ ์ฐพ์๋ณด๋ฉด
1. ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ ์ฌ์ฉํ๋ค.
2. ์ฐ์ฐ๋ง ํ๊ธฐ ๋๋ฌธ์ ์ ์ฅ๊ณต๊ฐ ์๋ค.
3. ์ค์ ๊ฐ์ ์ ์ฅํ๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด์ ์ฐ์ฐ์ ํ๊ฑฐ๋ ๋ค๋ฅธ ํ๋กํผํฐ์ ๊ฐ์ ์ ๋ฌํ๋ค.
4. ์ฐ์ฐ์ผ๋ก ์ธํด ๊ฐ์ด ๋ฐ๋๊ฒ ๋๋ฏ๋ก var๋ก ์ ์ธํด์ผํ๋ค.
5. ์ฐ์ฐ์ ํ ๋ getter์ setter๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๋กํผํฐ์ ์ ๊ทผํ๊ณ ๊ฐ์ ์ธํ ํ๋ค.
์ด๋ฐ ํน์ง๋ค์ด ์๋๋ฐ
์ ๋ง ์ด๋ก ์ ์ธ ์ด์ผ๊ธฐ์ฌ์ ์ ์๋ฟ์ง ์์์ใ ใ
๊ทธ๋ผ ๋ฐ๋ก ์ฝ๋๋ก ๋ณด๋ฉด์ ์์๋ณผ๊ฒ์!!!
์ผ๋จ ๊ธฐ๋ณธ์ ์ธ ํํ์ ๋๋ค.
var favoriteRamen: String {
get {
return "๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ \(favoriteRamen)"
}
set {
favoriteRamen = newValue
}
}
์ ์ผ ์ข์ํ๋ ๋ผ๋ฉด์ด ๋ฌด์์ธ์ง ๋ํ๋ด๋ ๊ธฐ๋ฅ์ผ๋ก ๋ง๋ค์ด๋ดค์ด์ใ ใ
์ผ๋จ ์ฐ์ฐ ํ๋กํผํฐ๋ ๊ผญ ํ์ ์ ๋ช ์ํด์ฃผ์ด์ผ ํด์.(์ค์!!!!)
์๋ํ๋ฉด ์ฐ์ฐ ํ๋กํผํฐ๋ ๊ฐ์ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ ํ์ ์ ์ ์ ์์ด์!!
๊ทธ๋์ ์ฌ์ฉํ๋ ์ ์ฅ ํ๋กํผํฐ๋ ๋ฆฌํดํ๋ ๊ฐ์ ํ์ ์ ๋ช ์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ ๊ฐ์ด ๊ณ์ ๋ฐ๋๊ณ ์์ฃ ?
๊ทธ๋์ var๋ก ์ ์ธํด์ฃผ์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ get๊ณผ set์ ๊ฐ๊ฐ getter์ setter๋ก ๋ถ๋ฅด๋๋ฐ์.
getter๋ ์ด๋ค ๊ฐ์ ๋ฆฌํดํ ๊ฑด์ง ์ฝ๋๋ก ๊ตฌํํฉ๋๋ค.
์์ ์ฝ๋์์๋ favoriteRamen์ ์ ๊ทผํ๋ฉด ์๋ ๊ตฌ๋ฌธ์ ๋ฆฌํดํฉ๋๋ค.
setter๋ ํด๋น ํ๋ผ๋ฏธํฐ์ ๊ฐ์ด ๋ฐ๋๋ฉด ๋ด๋ถ์ ๊ฐ์ ์์ ํ ์ผ์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
์์ ์ฝ๋ ์์๋ favoriteRamen์ ์ ๊ทผํ์ฌ ์์ ํ๋ฉด newValue๋ฅผ ํตํด ๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ ์ข ๋ฅ๊ฐ ๋ฐ๋๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ญ๊ฐ ์ด์ํ์ง ์๋์?
๋ถ๋ช ํ ์ฐ์ฐ ํ๋กํผํฐ๋ ๊ฐ์ ์ ์ฅํ์ง ์๋๋ค๊ณ ํ๋๋ฐ
์์ ์๋ ์ฝ๋์์๋ favoriteRamen ๋ฅผ ์ด๋ป๊ฒ ๋ถ๋ฌ์ค๋ ๊ฑธ๊น์?
๋ค!! ์์ ์ฝ๋๋ ํ๋ ธ์ด์.
favoriteRamen๋ ๋ฉ๋ชจ๋ฆฌ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
์ค์ ๋ก ์ ๋ ๊ฒ ์ฐ์๋ฉด ์๋ฌ๊ฐ ๋ ๊ฑฐ์์ใ
๊ทธ๋ผ ์ฝ๋๊ฐ ๊ตฌํ๋๋๋ก ์์ ํด ๋ณผ๊ฒ์!
struct Ramen {
var ramen: String
var favoriteRamen: String {
get {
return "๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ \(ramen)"
}
set(newRamen) {
ramen = newRamen
}
}
}
var myRamen: Ramen = Ramen(ramen: "๋๊ตฌ๋ฆฌ")
print(myRamen.favoriteRamen)
// ๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ ๋๊ตฌ๋ฆฌ
myRamen.favoriteRamen = "์ ๋ผ๋ฉด"
print(myRamen.favoriteRamen)
// ๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ ์ ๋ผ๋ฉด
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์์ด์!!
์ฝ๋๋ฅผ ์ดํด ๋ณด๋ฉด
getter ์์๋ favoriteRamen์ ์ ๊ทผํ๋ฉด ์ ๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ด ๋ฌด์์ธ์ง ramen์ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๊ณ ์์ด์!
setter ์์๋ favoriteRamen์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ฃผ๋ฉด ramen์ ์ ์ฅ ํ๋กํผํฐ์ ๊ฐ์ ์์ ํ์์ต๋๋ค.
๋ง ๊ทธ๋๋ก ๊ฐ์ ์์ ํ๋ค๋์ง ์ฐ์ฐ๋ง ํ๊ณ ์์ฃ ?
์ ๊ทธ๋ผ getter์ setter์ ๋ํด ์ฌ์ฉ๋ฒ์ ์กฐ๊ธ ๋ ์์ธํ ์์๋ณผ๊ฒ์!
๋จผ์ getter๋ ๊ฐ์ ๋ฆฌํดํ๋ ์ญํ ์ ํ๋๋ฐ return์ ์๋ตํ๋๋ผ๊ณ ๊ทธ ๊ฐ์ ๋ฆฌํดํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์งง์ getter์ ์ธ ์ด๋ผ๊ณ ํ๋๋ฐ์.
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์์ด์~~
struct Ramen {
var ramen: String
var favoriteRamen: String {
get {
"๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ \(ramen)"
}
set(newRamen) {
ramen = newRamen
}
}
}
์งง์ getter ์ ์ธ์ด ์๋ค๋ฉด ์งง์ setter์ ์ธ๋ ์๊ฒ ์ฃ ?
struct Ramen {
var ramen: String
var favoriteRamen: String {
get {
"๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ \(ramen)"
}
set {
ramen = newValue
}
}
}
set ๋ค์ ์๊น ์ ๊ฐ newRamen ์ด๋ผ๊ณ ์ด๋ฆ์ ์ง์์๋๋ฐ์์งง์ setter์ ์ธ์ ์ด๋ฆ์ ์์ง๊ณ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ด์!!
๊ทธ๋ฐ๋ฐ ์ด๋ฆ์ ๋ฐ๋ก ์ค์ ์ ์ํ๊ฒ ๋๋ฉด
๋ฐ๋์ newValue๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
newValue์ ํ์ ์ ๋ฐ๋ก ์ค์ ํด์ฃผ์ง ์์๋ favoriteRamen์ ํ์ String์ ๋ฐ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๊ถ๊ธํ ์ !!
getter์ setter๋ฅผ ํ๋๋ง ์ธ ์ ์๋??
๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด
getter๋ง ํผ์ ์ฌ์ฉํ ์ ์๊ณ , setter๋ getter๊ฐ ์์ด์ผ๋ง ์ฌ์ฉํ ์ ์์ด์!!
์ฝ๋๋ก ํ์ธํด ๋ณผ๊ฒ์!!
struct Ramen {
var ramen: String
var favoriteRamen: String {
get {
return "๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ \(ramen)"
}
}
}
var myRamen: Ramen = Ramen(ramen: "๋๊ตฌ๋ฆฌ")
print(myRamen.favoriteRamen)
// ๋ด๊ฐ ์ข์ํ๋ ๋ผ๋ฉด์ ๋๊ตฌ๋ฆฌ
myRamen.favoriteRamen = "์ ๋ผ๋ฉด" // error
์ฝ๋๋ฅผ ๋ณด์๋ฉด getter๋ง ์ค์ ํด ์ฃผ์๋๋ฐ์!
๊ทธ๋ผ ์์ฑ๋ ์ธ์คํด์ค์์ favoriteRamen์ ์ ๊ทผํ์ฌ ๊ฐ์ ์ฃผ๋ฉด ์๋ฌ๊ฐ ๋๊ฒ ๋ฉ๋๋คใ ใ
์ฃผ์ํด ์ฃผ์ ์ผ ํด์!!
ํด...
์ค๋์ ์ฐ์ฐ ํ๋กํผํฐ์ ๋ํด์ ์์๋ดค์ต๋๋ค.
ํน์ ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋คใ ใ
๊ธ ์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS/Swift] ์ค๋ฅ์ฒ๋ฆฌ (Error Handling) (0) | 2022.06.03 |
|---|---|
| [iOS/Swift] ํ๋กํผํฐ(Properties) ์์๋ณด๊ธฐ(ํ์ ํ๋กํผํฐ) - (3/3) (0) | 2022.06.03 |
| [iOS/Swift] ํ๋กํผํฐ(Properties) ์์๋ณด๊ธฐ(์ ์ฅ ํ๋กํผํฐ)-(1/3) (0) | 2022.05.30 |
| [iOS/Swift] ๊ตฌ์กฐ์ฒด(struct)์ ํด๋์ค(class)์ ์ฐจ์ด ์์๋ณด๊ธฐ! (0) | 2022.05.29 |
| [iOS/Swift] Closure(ํด๋ก์ ) ์์๋ณด๊ธฐ (0) | 2022.05.27 |
- Total
- Today
- Yesterday
- RX
- RxSwift
- URLSession
- XCTest
- ํ ์คํธ
- Protocol
- ํ๋กํผํฐ
- Unit Test
- ๊ณต๋ถ
- swift ๊ณต๋ถ
- ์ค์ํํธ
- ์ค์ํํธ map
- test
- Swift Network
- ์ค์ํํธ ๊ณต๋ถ
- ํ๋กํ ์ฝ
- swift urlsession
- ์ค์ํํธ ํ๋กํ ์ฝ
- xcode
- autolayout
- swift
- ์คํ ๋ ์ด์์
- set
- network
- Property
- swift ํ๋กํ ์ฝ
- ios
- func
- observable
- Clean
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |