[iOS] Property 2

Eugenie·2022년 4월 13일
0

[iOS] Property

목록 보기
2/2

Hits

Property

Property
값을 특정 클래스, 구조체, 열거형과 연결한다.


Swift 에서 Property 는 크게 세 가지로 나눌 수 있다.

🌵 저장 프로퍼티 [ Stored Property ]

상수와 변수값을 인스턴스의 일부로 저장한다.
클래스구조체에서만 사용된다.

🌵 연산 프로퍼티 [ Computed Property ]

특정 연산을 수행하여, 값을 반환한다.
클래스, 구조체, 열거형에서 사용된다.

🌵 타입 프로퍼티 [ Type Property ]

프로퍼티를 타입 자체와 연결한 형태이다.


연산 프로퍼티 [ Computed Property]

값을 저장하는 저장 프로퍼티와 달리,
연산 프로퍼티는 값을 저장하는 공간이 없다.

값을 저장하지 않기 때문에
무조건 변수로 선언되어야 하고,
타입추론이 불가하므로 타입을 꼭 명시해주어야 한다.

다른 저장 프로퍼티를 가져와서 연산을 하고
적절한 값을 돌려주는 역할을 한다.

구조체, 클래스, 열거형 모두에서 사용 가능하고,
접근자(getter), 설정자(setter) 가 필요하다.

접근자 [ getter ]

값을 가져와 연산하여 리턴하는 역할을 한다.
타입 명시를 꼭 해주어야 한다.

return 구문이 필수이지만,
getter 의 반환값이 프로퍼티 타입과 동일하다면
return 키워드를 생략해도 그 결과값이 접근자의 반환값이 된다.

설정자 [ setter ]

값을 설정하는 역할을 한다.
매개변수로 받은 값을 저장 프로퍼티에 연산하여 저장한다.

setter 는 매개변수가 꼭 필요하다.

❗️ 읽기만 하면 get, 값을 쓰면 set 에 접근한다.
// example1

struct Person {
    var name: String = "Eugenie" // 저장 프로퍼티
    
    // 값을 저장하지 않으므로, 타입추론이 불가하다.
    // 타입을 꼭 명시해주어야 한다.
    var introduce: String {
        
        // 접근자 [ getter ]
        // 저장 프로퍼티의 값을 연산하여 반환하므로
        // return 구문을 꼭 작성해주어야 한다.
        get {
            return "Hello, My name is \(name)."
        }
        
        // 설정자 [ setter ]
        // 매개변수로 받은 값을 어떤 저장 프로퍼티에,
        // 어떻게 설정할 것인지 구현한다.
        set {
            self.name = "My name is \(name)."
            // self. "My name is + newValue + ." 가능
        }
    }
}

var individual: Person = Person()

// get 에 접근
print(individual.introduce) // Hello, My name is Eugenie.

// set 에 접근
individual.introduce = ""
print(individual.name)     // My name is Eugenie.

읽기 전용 연산 프로퍼티

get 만 사용하여 읽기 전용으로 구현이 가능하다.

// example2

struct Person {
    var name: String = "Eugenie"
    var introduce: String {
        get {
            return "Hello, My name is \(name)."
        }
    }
}

var individual_1: Person = Person()
// Hello, My name is Eugenie.

print(individual_1.introduce)

// individual_1.introduce = "" // Error

set 에 접근하려고 한다면
'introduce' is a get-only property' 라고
에러 메세지가 발생한다.

💡 get 만 쓸 때는 get 키워드 없이 구현도 가능하다.
// example3
struct Human {
    var name: String = "eugnie"
    
    var introduce: String {
        return "My name is \(name)."
    }
}

var individual_2: Person = Person()

print(individual_2.introduce)
// Hello, My name is Eugenie.

메서드 [ Method ] vs. 연산 프로퍼티 [ Computed Property ]

메서드 [ Method ]

: 접근자, 설정자를 각각 따로 구현해야 한다.
▶️ 구현하는 데에 불편함과 가독성이 떨어질 가능성이 있다.

연산 프로퍼티 [ Computed Property ]

: 직관적이고 편리하고, 읽기 전용 연산 프로퍼티 구현이 가능하다.
▶️ 메서드는 읽기 전용, 쓰기 전용 모두 구현이 가능하다.


📚 Reference
The Swift Language Guide
Swift ) Properties - Computed Property(연산 프로퍼티)
[Swift] 프로퍼티 개념 정리 (2); 연산 프로퍼티

profile
🌱 iOS developer

0개의 댓글