[iOS]Swift - Property

김말이·2023λ…„ 8μ›” 20일
0

Property

πŸ’‘ 클래슀, ꡬ쑰체, μ—΄κ±°ν˜• 등에 κ΄€λ ¨λœ λ³€μˆ˜ λ˜λŠ” 속성

1. μ €μž₯ ν”„λ‘œνΌν‹°(Stored Properties)

  • κ°€μž₯ λ‹¨μˆœν•œ κ°œλ…μ˜ ν”„λ‘œνΌν‹°
  • ν΄λž˜μŠ€μ™€ κ΅¬μ‘°μ²΄μ—μ„œλ§Œ μ‚¬μš©ν•  수 있고, 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ 선언됨

class Human {
    let name: String = "unknown"
    var age: Int = 0
}
 
struct Person {
    let name: String = "unknown"
    var age: Int = 0
}

name, age λ“± ꡬ쑰체에 μ €μž₯된 μƒμˆ˜, λ³€μˆ˜ λͺ¨λ‘ μ €μž₯ ν”„λ‘œνΌν‹°

ꡬ쑰체의 μ €μž₯ ν”„λ‘œνΌν‹°κ°€ μ˜΅μ…”λ„μ΄ μ•„λ‹ˆλ”λΌλ„, κ΅¬μ‘°μ²΄λŠ” μ €μž₯ ν”„λ‘œνΌν‹°λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” μ΄λ‹ˆμ…œλΌμ΄μ €λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•œλ‹€. ν•˜μ§€λ§Œ 클래슀의 μ €μž₯ ν”„λ‘œνΌν‹°λŠ” μ˜΅μ…”λ„μ΄ μ•„λ‹ˆλΌλ©΄ ν”„λ‘œνΌν‹° 기본값을 μ§€μ •ν•΄μ£Όκ±°λ‚˜, μ‚¬μš©μž μ •μ˜ μ΄λ‹ˆμ…œλΌμ΄μ €λ₯Ό 톡해 λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€.

2. μ—°μ‚° ν”„λ‘œνΌν‹°(Computed Properties)

  • νŠΉμ • μƒνƒœμ— λ”°λ₯Έ 값을 μ—°μ‚°ν•˜λŠ” ν”„λ‘œνΌν‹°
  • ν΄λž˜μŠ€μ™€ ꡬ쑰체 μ—΄κ±°ν˜•μ— λͺ¨λ‘ μΆ”κ°€ κ°€λŠ₯
  • μ €μž₯ 곡간을 갖지 μ•ŠμŒ
    • λ‹€λ₯Έ μ €μž₯ ν”„λ‘œνΌν‹°μ˜ 값을 읽어 연산을 μ‹€ν–‰ν•˜κ±°λ‚˜, ν”„λ‘œνΌν‹°λ‘œ 전달받은 값을 λ‹€λ₯Έ ν”„λ‘œνΌν‹°μ— μ €μž₯ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€ μ™ΈλΆ€μ—μ„œ λ©”μ„œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 값에 μ ‘κ·Όν•  수 있게 ν•˜κΈ° μœ„ν•΄
  • μ—°μ‚° ν”„λ‘œνΌν‹°λŠ” μ ‘κ·ΌμžμΈ getλ©”μ„œλ“œμ²˜λŸΌ 읽기 μ „μš©μ„ κ΅¬ν˜„ν•˜κΈ° μ‰½μ§€λ§Œ, μ“°κΈ° μ „μš©μ€ κ΅¬ν˜„ν•  수 μ—†μŒ
var name: Type {
    get {  //getter λ‹€λ₯Έ μ €μž₯ ν”„λ‘œνΌν‹°μ˜ 값을 μ–»κ±°λ‚˜ μ—°μ‚°ν•˜μ—¬ 리턴할 λ•Œ
        statements
        return expr
    }
    set(name) {  //setter λ‹€λ₯Έ μ €μž₯ν”„λ‘œνΌν‹°μ— 값을 μ €μž₯ν•  λ•Œ
        statements
    }
}
  • getter: μΈμŠ€ν„΄μŠ€ λ‚΄/μ™ΈλΆ€μ˜ 값을 μ—°μ‚°ν•˜μ—¬ μ μ ˆν•œ 값을 λ°˜ν™˜ν•œλ‹€. 리턴 ꡬ문이 항상 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.
  • setter: μ€λ‹‰ν™”λœ λ‚΄λΆ€μ˜ ν”„λ‘œνΌν‹° 값을 κ°„μ ‘μ μœΌλ‘œ μ„€μ •ν•œλ‹€. parameter둜 받은 값을 μ–΄λ–€ μ €μž₯ ν”„λ‘œνΌν‹°μ— μ–΄λ–»κ²Œ μ„€μ •ν•  것인지 κ΅¬ν˜„ν•œλ‹€.

μ‚¬μš© μ˜ˆμ‹œ

class Person {
    var name: String = "kijrary" // μ €μž₯ ν”„λ‘œνΌν‹°
 
    var alias: String { // μ—°μ‚° ν”„λ‘œνΌν‹°
        get {
            return name
        }
        set(name) {
            self.name = name
        }
    }
}

3. νƒ€μž… ν”„λ‘œνΌν‹°(Type Properties)

  • 각각의 μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ νƒ€μž… μžμ²΄μ— μ†ν•˜κ²Œ λ˜λŠ” ν”„λ‘œνΌν‹°
  • μΈμŠ€ν„΄μŠ€μ˜ 생성 여뢀와 상관없이 νƒ€μž… ν”„λ‘œνΌν‹°μ˜ 값은 ν•˜λ‚˜
  • 항상 초기 값을 κ°€μ Έμ•Ό ν•œλ‹€(μ €μž₯ ν”„λ‘œνΌν‹°μ˜ 경우)
class Human {
    static let name: String = "kijrary" // μ €μž₯ νƒ€μž… ν”„λ‘œνΌν‹°
    static var alias: String {          // μ—°μ‚° νƒ€μž… ν”„λ‘œνΌν‹°
        return name + "은 바보"
    }
}
  • ν”„λ‘œνΌν‹° μ•žμ— static을 μ‚¬μš©ν•˜λ©΄ νƒ€μž… ν”„λ‘œνΌν‹°κ°€ λœλ‹€.
let exampleProperty: Human = .init()
exampleProperty.name //error

Human.name // -> kijrary
  • μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ 생성해도 κ·Έ μ•ˆμ˜ μ €μž₯/μ—°μ‚° ν”„λ‘œνΌν‹°μ— μ ‘κ·Όν•  수 μ—†μŒ
  • ν•΄λ‹Ή ν”„λ‘œνΌν‹° ν•œ 개λ₯Ό μ „μ²΄μ μœΌλ‘œ κ³΅μœ ν•˜λŠ” κ°œλ…
    • νƒ€μž… 이름을 ν†΅ν•΄μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯

κ·Έ νƒ€μž…μ˜ λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” κ°’(C μ–Έμ–΄μ˜ static constant와 μœ μ‚¬)μ΄λ‚˜, λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ 곡용으둜 μ ‘κ·Όν•˜κ³  값을 λ³€κ²½ν•  수 μžˆλŠ” λ³€μˆ˜(C μ–Έμ–΄μ˜ static λ³€μˆ˜μ™€ μœ μ‚¬)등을 μ •μ˜ν•  λ•Œ μœ μš©ν•˜λ‹€.

profile
κ³΅λΆ€ν•΄μ„œ λ‚¨μ£Όμž

0개의 λŒ“κΈ€