iOS/🟠 Swift

[Swift] ν”„λ‘œν† μ½œ 속성 μš”κ΅¬μ‚¬ν•­ (Property Requirements)

woozzang 2021. 1. 15. 14:27
참고 자료: Protocols - swift.org

 

var

protocol Figure {

    var name: String { get set }
}

 

ν”„λ‘œν† μ½œμ—μ„œ 속성 μ„ μ–Έ μ•žμ— λΆ™λŠ” `var` ν‚€μ›Œλ“œλŠ” μ†μ„±μ˜ κ°€λ³€μ„± κ³ΌλŠ” 관련이 μ—†μŠ΅λ‹ˆλ‹€.

 

ν”„λ‘œν† μ½œμ—μ„œ 속성은 무쑰건 μ•žμ— `var` ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ•Όν•©λ‹ˆλ‹€.

 

λ˜ν•œ μ €μž₯속성 ν˜Ήμ€ κ³„μ‚°μ†μ„±λ§ŒμœΌλ‘œ κ΅¬ν˜„μ„ κ°•μ œν•  μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.

 

μ†μ„±μ˜ 가변성은 λ³€μˆ˜ 의 νƒ€μž… 뒀에 λΆ™λŠ” { get set } 의 μ‘°ν•© 으둜 κ²°μ •λ©λ‹ˆλ‹€.

 

get , set 이 λͺ¨λ‘ μžˆλ‹€λ©΄ 읽기 μ“°κΈ°λ₯Ό λͺ¨λ‘ κ°€λŠ₯ν•˜κ²Œ κ΅¬ν˜„ν•΄μ•Ό ν•˜κ³ ,

 

get 만 μžˆλŠ” 속성이라면 읽기만 κ°€λŠ₯해도 ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” κ²ƒμž…λ‹ˆλ‹€. 읽기 μ“°κΈ°λ₯Ό λͺ¨λ‘ κ°€λŠ₯ν•˜κ²Œ κ΅¬ν˜„ν•΄λ„ λ©λ‹ˆλ‹€.

gettable: 속성을 읽기 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 것
settable: 속성을 μ“°κΈ° κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 것 

 

{ get } 만 μžˆλŠ” κ²½μš°λŠ” μ™œ λ‘˜ λ‹€ κ°€λŠ₯ν• κΉŒμš”?

 

ν”„λ‘œν† μ½œμ€ μ΅œμ†Œν•œμ˜ μš”κ΅¬μ‚¬ν•­μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.


 

static var

 

protocol Figure {

    static var name: String { get set }
}

static 으둜 μ„ μ–Έν•˜λ©΄ ν”„λ‘œν† μ½œμ—μ„œ μ±„νƒν•œ νƒ€μž…μ—μ„œ κ΅¬ν˜„ μ‹œ νƒ€μž… μ†μ„±μœΌλ‘œ μ„ μ–Έν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

μ°Έκ³ )

νƒ€μž… 속성은 μ„œλΈŒν΄λž˜μŠ€μ—κ²Œ μƒμ†λ˜μ§€λ§Œ, μ˜€λ²„λΌμ΄λ”©μ€ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€

μ˜€λ²„λΌμ΄λ”©μ΄ κ°€λŠ₯ν•˜κ²Œ ν•˜λ €λ©΄ κ΅¬ν˜„ μ‹œ `class` λ₯Ό 뢙이면 λ©λ‹ˆλ‹€.

κ·Έλ ‡κ²Œ 해도 ν”„λ‘œν† μ½œ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.


 

Example Code

protocol Figure {

    /* 1 */
    var name: String { get set }
}

struct Rectangle: Figure {

    /* 2 */
    // let name = "Rect"
    var name = "Rect"
}

struct Triangle: Figure {
    var name = "Triangle"
}

struct Circle: Figure {

    /* 3 */
    var name: String {
        get {
            return "Circle"
        }
        set {
            
        }
    }
}

 

/* 1 */ μ—μ„œ name 속성은 { get set } 으둜 μ„ μ–Έ λ˜μ—ˆμœΌλ―€λ‘œ, ν”„λ‘œν† μ½œ κ΅¬ν˜„μ‹œ 읽기와 μ“°κΈ°κ°€ λͺ¨λ‘ κ°€λŠ₯ν•œ μ†μ„±μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

/* 2 */ μ—μ„œ `let`은 μ‚¬μš©ν• μˆ˜ μ—†μŠ΅λ‹ˆλ‹€. ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­κ³Ό λ‹€λ₯΄κ²Œ μ“°κΈ°κ°€ λΆˆκ°€λŠ₯ν•΄μ§€κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

/* 3 */ μ—μ„œ name 은 계산 μ†μ„±μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.  set 블둝이 사라진닀면 컴파일 μ—λŸ¬κ°€ 뜰 κ²ƒμž…λ‹ˆλ‹€. μ“°κΈ°κ°€ λΆˆκ°€λŠ₯ ν•΄μ§€κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

 

set 블둝 μ‚­μ œ μ‹œ 볼수 μžˆλŠ” μ—λŸ¬ λ©”μ‹œμ§€. ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­μ„ λ”°λ₯΄λΌκ³  λ§ν•©λ‹ˆλ‹€.

 

 

 

 

끝!


 

λ‹€μŒ κΈ€: Method Requirements - Protocols

 

Method Requirements - Protocols

속성과 λ§ˆμ°¬κ°€μ§€λ‘œ method 도 `static` ν‚€μ›Œλ“œλ₯Ό 톡해 type methodλ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일반적인 instance method 와 type method처럼 μ •μ˜ν•˜λ©΄ λ˜μ§€λ§Œ, ν”„λ‘œν† μ½œμ€ κ΅¬ν˜„μ€ ν•˜μ§€ μ•ŠλŠ” μš”κ΅¬μ‚¬ν•­ 이기 λ•Œλ¬Έμ— {

woozzang.tistory.com