[Swift 문법] 프로퍼티

!·2022년 6월 26일
0

Swift 문법

목록 보기
15/27

프로퍼티

  • 구조체, 클래스, 열거형과 연관된 값으로, 연산을 수행하거나 을 저장할 수 있다.
  • 다만, 열겨형의 내부에는 연산 프로퍼티만 구현할 수 있다.

프로퍼티 종류

  • 저장 프로퍼티
  • 연산 프로퍼티 : var로만 선언할 수 있다.
  • 타입 프로퍼티

저장 프로퍼티

  • 구조체 의 경우에는 저장 프로퍼티에 맞는 이니셜라이저를 자동적으로 제공하지만(멤버와이즈 이니셜라이저), 클래스는 사용자가 직접 이니셜라이저를 정의해야 한다.

지연 저장 프로퍼티

  • lazy 키워드를 이용하여 생성할 수 있다.
  • 지연 저장 프로퍼티는 호출이 되는 순간에 값을 초기화하는 변수로, 잘활용하면 성능 저하나 불필요한 공간 낭비를 줄일 수 있다.
  • 상수는 생성되기 전에 초기화 되어야하기때문에 지연 저장 상수 프로퍼티는 정의할 수 없다.
  • 멀티 스레드 환경에서 지연 저장 프로퍼티에 동시 접근이 이루어질때, 한 번만 초기화된다는 보장이 없다.

연산 프로퍼티

  • 연산 프로퍼티는 실제 값을 저장하는 프로퍼티가 아니라, 어떤 상태에 따른 값을 연산하는 프로퍼티이다.
  • 클래스, 구조체, 열거형 등에 연산 프로퍼티를 정의할 수 있다.
  • get(접근자), set(설정자) 키워드를 통해 정의한다.
class Account{
    var credit: Int = 0{
        willSet{
            print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
        }
        didSet{
            print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
        }
    }

    var dollarValue: Double{
        get{
            return Double(credit)
        }
        set(dollar){
            credit = Int(newValue * 1000)
            print("잔액을 \(dollar)달러로 변경 중입니다.")
        }
    }
}
  • 변수에 접근하는 경우에는 접근자 블록이 실행되고, 변수에 값을 할당할때는 설정자 블록이 실행된다.
  • set의 매개변수를 설정할 수 있지만, 설정하지 않는다면 newValue 릁 통해 접근할 수 있다.

타입 프로퍼티

  • 타입 프로퍼티는 두 가지로, 변수or상수 저장 프로퍼티와 연산 타입 프로퍼티이다. 연산 타입 프로퍼티는 반드시 변수로 선언해야 한다.
  • 저장 타입 프로퍼티는 지연 연산 되기때문에 반드시 초기값을 지정해주어야 한다.
  • 지연 저장 프로퍼티와는 다르게 다중 스레드 환경이더라도 단 한번만 초기화된다.

지역변수, 전역변수

  • 저장 프로퍼티연산 프로퍼티의 기능은 함수,메소드,클로저, 타입 등의 외부에 위치한 지역변수/전역변수에서도 사용 가능하다.
  • 전역변수는 자동적으로 지연 전역 변수가 되며, 지역변수는 그렇지 않다.
var a: Int = 100
var b: Int = 200
var sum : Int {	// get 생략가능
	get{
    	return a+b
    }
profile
개발자 지망생

0개의 댓글