본문 바로가기

swift 기본 문법

swift 기본 문법) 연산 프로퍼티(get, set) 알아보기

반응형

오늘은 수업에서 다뤘던 연산 프로퍼티에 대해서 복습해보려고 한다. 

 

우선 연산 프로퍼티의 핵심 내용은 다음과 같다. 

1. 클래스, 구조체, 열거형에 사용

2. 저장 프로퍼티와 달리 저장 공간을 갖지 않는다. + 저장할 프로퍼티를 만들어야 한다. 

3. 항상 var로 정의해야 한다. (다른 프로퍼티의 값을 연산, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장하기 때문에)

 

연산 프로퍼티 말을 이해해보면 값을 저장하지 않고 연산을 하는 프로퍼티구나 라고 짐작해볼 수 있다. 

그리고 연산 프로퍼티는 값을 저장하지 않고 연산하기 때문에 어떤 타입을 연산할지 알기 위해 타입을 명시해야 한다. 

추가로 연산 이라고 하면 어떤 값을 받고 다른 프로퍼티에 넘겨줄지를 알아야 한다고 짐작할 수 있다. 

 

우선 예시를 들어서 설명하면 

struct Family {
    var member: Int = 0
    
    var members: Int {
        get {
            return member + 1
        }
        set {
            if newValue > 0 {
                member = newValue + 1
                print("가족 수가 0보다 큽니다.")
            } else {
                print("가족 수가 \(newValue)입니다. ")
            }
        }
    }
}

var family : Family = Family()

//get에 접근 return 0 + 1
print(family.members) // 1

//set에 접근 -1 + 1
//결과값을 member에 할당

family.members = -1 //가족 수가 -1 입니다.
print(family.member)// 0


//set에 접근 4 + 1
//결과값을 member에 할당
family.members = 4 //가족 수가 0보다 큽니다.
print(family.member) //5

family.membersget에 접근한다는 의미

return 에 따라 프로퍼티 값과 1이 더해져 나타난다. 

 

family.members = -1 는 newValue에 -1을 대입하고 결과를 다시 member에 저장

따라서 failmy.member 는 정수 0을 갖고 있는다. 

 

기억해야 할 것은

연산 프로퍼티를 쓰기 위해서는 값을 저장할 저장 프로퍼티가 존재해야 하고

연산 프로퍼티는 저장 프로퍼티의 값을 받아오고 다시 저장한다는 것이다. 

 

반응형

다음은 String타입으로 연산 프로퍼티를 연습해보았다. 

class Person {
    var introducing: String = "미지정"
    
    var name: String {
        get {
            return self.introducing + "된 상태입니다."
        }
        set {
            self.introducing = newValue + "입니다."
        }
    }
}
var person = Person()
print(person.name) //미지정된 상태입니다.
person.name = "김땡땡"
print(person.introducing) //김땡땡입니다.

 

연산 프로퍼티의 set의 newValue

위의 예시를 보면 set 부분의 파라미터가 newValue라고 되어있는 것을 볼 수 있다. 

newValue는 기본값이고 이름을 변경해줄 수 있다. 

class Person {
    var introducing: String = "미지정"
    
    var name: String {
        get {
            return self.introducing + "된 상태입니다."
        }
        set(myName) {
            self.introducing = myName + "입니다."
        }
    }
}
var person = Person()
print(person.name) //미지정된 상태입니다.
person.name = "김땡땡"
print(person.introducing) //김땡땡입니다.

 

연산 프로퍼티는 get만을 사용할 수는 있지만 set만을 사용할 수는 없다. 

 

 

그 동안 어려워서 미뤄뒀던 연산 프로퍼티에 대해서 공부해보았다.

이제 실제 프로젝트에 어떻게 사용해볼지 고민해봐야겠다!

 

 

 

 

 

 

https://stackoverflow.com/questions/24699327/what-are-get-and-set-in-swift

 

What are 'get' and 'set' in Swift?

I'm learning Swift and I'm reading The Swift Programming Language from Apple. I don't have any Objective-C background (only PHP, JavaScript, and others, but not Objective-C). On page 24-25 I see this

stackoverflow.com

https://zeddios.tistory.com/245

 

 

Swift ) Properties - Computed Property(연산 프로퍼티)

안녕하세요 :) Zedd입니다. 저번 < Properties - Stored Property(저장 프로퍼티) >글에 이어서 연산 프로퍼티 글을 써볼게요! 위 글을 반드시!!!!!!!읽고오셔야 연산 프로퍼티 글도 이해가 잘 되실거에요 :)

zeddios.tistory.com

 

 

https://babbab2.tistory.com/119

 

Swift) 프로퍼티 정복하기 (2/4) - 연산 프로퍼티(Computed Property)

안녕하세요!! 소들입니다 :) 저번 포스팅에서 프로퍼티의 종류엔 3가지가 있고, 그중 저장 프로퍼티에 대해 공부 했어요!!! 모른다면 이 포스팅 참조 이번에 공부할 내용은 연산 프로퍼티라는 것

babbab2.tistory.com

 

반응형