[ Swift ] ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)

๐Ÿ“’ Study/๐Ÿšฉ Swift โ”ƒ 2024. 3. 13. 10:13
๋ชฉ์ฐจ
  1. ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)๋ž€?
  2. didSet
  3. willSet
  4. ์†์„ฑ ๊ฐ์‹œ์ž์˜ ์˜ˆ์‹œ

 

 

 

 

์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)๋ž€?

ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์†์„ฑ(property)์ด ๋ณ€ํ•  ๋•Œ ํ˜ธ์ถœ์ด ๋œ๋‹ค.

 


      
var myProperty: Int = 20 {
didSet{
// ๋ณ€๊ฒฝ๋œ ์งํ›„์— ํ˜ธ์ถœ
// oldValue๊ฐ’ ํ˜ธ์ถœ๊ฐ€๋Šฅ
}
willSet{
// ๋ณ€๊ฒฝ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
// newValue๊ฐ’ ํ˜ธ์ถœ๊ฐ€๋Šฅ
}
}

 

didSet

- ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ์ง ํ›„์— ํ˜ธ์ถœ๋˜๊ณ , ๋ณ€ํ•˜๊ธฐ ์ „์˜ ๊ฐ’์ด oldValue๋กœ ์ž๋™ ์ €์žฅ๋จ.

 

willSet

- ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ์ง์ „์— ํ˜ธ์ถœ๋˜๊ณ , ๋ณ€ํ•œ ํ›„์˜ ๊ฐ’์ด newValue๋กœ ์ž๋™ ์ €์žฅ

 

 

  • ์ €์žฅ์†์„ฑ์€ var๋กœ๋งŒ ์„ ์–ธ์ด ๊ฐ€๋Šฅ
    • let์€ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์ฐฐํ•  ํ•„์š”๊ฐ€ ์—†์Œ.
    • ์ง€์—ฐ ์ €์žฅ ์†์„ฑ์€ ๊ด€์ฐฐ์ด ๋ถˆ๊ฐ€๋Šฅ
  • ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ๋™์ผ
  • ์ €์žฅ ์†์„ฑ์˜ ๋ณ€ํ™” ์‹œ์ ์„ ๊ด€์ฐฐํ•˜๋Š” ์‹ค์งˆ์ ์ธ ๋ฉ”์„œ๋“œ
    • ํƒ€์ž…/์ธ์Šคํ„ด์Šค ๋‘˜ ๋‹ค ๊ฐ€๋Šฅ
    • ์ƒ์†ํ•œ ๊ณ„์‚ฐ ์†์„ฑ์„ ์žฌ์ •์˜ํ•˜์—ฌ ๊ด€์ฐฐ ๊ฐ€๋Šฅ
  • ์ผ๋ฐ˜์ ์œผ๋กœ didSet์„ ๋งŽ์ด ์‚ฌ์šฉ
  • ๋ณ€์ˆ˜๊ฐ€ ๋ณ€ํ•˜๋ฉด, ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋Š” ํŒจํ„ด ๊ตฌํ˜„์„ ํ•  ๋•Œ ์‚ฌ์šฉ
    • ์ƒํƒœ๋ฉ”์„ธ์ง€๋‚˜ ํ”„๋กœํ•„ ์‚ฌ์ง„ ์„œ๋ฒ„์—์„œ์˜ ๋ณ€ํ™” -> ํ™”๋ฉด ์—…๋ฐ์ดํŠธ

 

 

 

 

[ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜•์—์„œ ์†์„ฑ๊ฐ์‹œ์ž ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ (์ธ์Šคํ„ด์Šค ์†์„ฑ์ผ ๋•Œ) ]

  1. ์ €์žฅ ์†์„ฑ
    • ์ƒ์†ํ•œ ์ €์žฅ ์†์„ฑ์€ ๊ฐ์‹œ์ž ์ถ”๊ฐ€๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์žฌ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์—†์Œ
  2. ์ƒ์†ํ•œ ๊ณ„์‚ฐ ์†์„ฑ์„ ์žฌ์ •์˜ํ•ด ์†์„ฑ ๊ด€์ฐฐ์ž ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
    • ๋ณธ๋ž˜์˜ ๊ณ„์‚ฐ ์†์„ฑ์€ ์†์„ฑ๊ฐ์‹œ์ž ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ( ์›๋ž˜์˜ ๊ณ„์‚ฐ ์†์„ฑ์—์„œ getter๋‚˜ setter๋ฅผ ํ†ตํ•ด ๊ฐ์‹œ์ž ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ )

 

 

์†์„ฑ ๊ฐ์‹œ์ž์˜ ์˜ˆ์‹œ


      
var name: String = "ํ™๊ธธ๋™" {
didSet{
print("๋ณ€ํ•˜๊ธฐ ์ „์˜ ๊ฐ’: \(oldValue)")
}
willSet{
print("๋ณ€ํ•œ ํ›„์˜ ๊ฐ’: \(newValue)")
}
}
name = "๋ฐฐ์ง€ํ•ด"
/*
์ถœ๋ ฅ:
๋ณ€ํ•œ ํ›„์˜ ๊ฐ’: ๋ฐฐ์ง€ํ•ด
๋ณ€ํ•˜๊ธฐ ์ „์˜ ๊ฐ’: ํ™๊ธธ๋™
*/

 


      
class UserAccount {
var username: String
var password: String
var loginAttempts: Int = 0 {
didSet {
if loginAttempts >= 3 {
print("๋กœ๊ทธ์ธ ๋ณ€๊ฒฝ ์‹œ๋„๊ฐ€ 3ํšŒ๋ฅผ ์ดˆ๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค. ")
print("๊ณ„์ •์ด ๋น„ํ™œ์„ฑํ™” ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
}
}
}
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
}
func unlockAccount() {
isLocked = false
}
}
let user = UserAccount(username: "EarthSea", password: "1234")
user.login(with: "earthsea")
// ์ถœ๋ ฅ: ๋กœ๊ทธ์ธ ์‹คํŒจ!
user.login(with: "12345")
// ์ถœ๋ ฅ: ๋กœ๊ทธ์ธ ์‹คํŒจ!
user.login(with: "1234!")
/* ์ถœ๋ ฅ:
๋กœ๊ทธ์ธ ์‹คํŒจ!
๋กœ๊ทธ์ธ ๋ณ€๊ฒฝ ์‹œ๋„๊ฐ€ 3ํšŒ๋ฅผ ์ดˆ๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ณ„์ •์ด ๋น„ํ™œ์„ฑํ™” ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
*/
user.login(with: "ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„")
/* ์ถœ๋ ฅ:
๋กœ๊ทธ์ธ ์‹คํŒจ!
๋กœ๊ทธ์ธ ๋ณ€๊ฒฝ ์‹œ๋„๊ฐ€ 3ํšŒ๋ฅผ ์ดˆ๊ณผํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ณ„์ •์ด ๋น„ํ™œ์„ฑํ™” ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
*/
user.unlockAccount()
// ์ถœ๋ ฅ: ๊ณ„์ •์ด ์ž ๊ธˆ ํ•ด์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)๋ž€?
  2. didSet
  3. willSet
  4. ์†์„ฑ ๊ฐ์‹œ์ž์˜ ์˜ˆ์‹œ
'๐Ÿ“’ Study/๐Ÿšฉ Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ Swift ] ํ™•์žฅ(Extension) #1 - ํ™•์žฅ์˜ ๊ฐœ๋…๊ณผ ์ƒ์†๊ณผ์˜ ์ฐจ์ด
  • [ Swift ] ์ ‘๊ทผ์ œ์–ด(Access Control) #1 - ์›์น™๊ณผ ๋ฌธ๋ฒ•
  • [ Swift ] ํƒ€์ž…์บ์ŠคํŒ…(Type Casting)
  • [ Swift ] ๋ฐ˜๋ณต๋ฌธ - For๋ฌธ
EarthSea
EarthSea
์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ์งธ์ž…๋‹ˆ๋‹ค ๐ŸŒฑ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๊ธ€์“ฐ๊ธฐ
EarthSea
EarthSea's Log๐ŸŒ
EarthSea

๊ณต์ง€์‚ฌํ•ญ

  • EarthSea's Introduce
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • โœ๏ธ TIL
    • ๐Ÿ“‘ Project
    • ๐Ÿ“’ Study
      • ๐ŸŒ React
      • ๐Ÿšฉ Swift
      • ๐Ÿ“ UIKit
      • ๐Ÿ–ค Git
      • ๐Ÿฉต Python
    • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Coding Test
      • โŒจ๏ธ Programmers
      • ๐Ÿ–Œ๏ธ BAEKJOON
    • ๐ŸŽ† SSAFY
    • ๐ŸŽ Apple
    • ๐Ÿท๏ธ Tistory
    • ์˜ค๋กฏ์ด ๋‚˜์˜ ์‹œ๊ฐ„
Total
Today
Yesterday
hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
EarthSea
[ Swift ] ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.