Language/Swift

Swift 프로퍼티 타입들

Greensky0026 2021. 3. 12. 17:55
반응형

 프로퍼티는 속성이라고도 불린다.

객체의 일부로, 이름과 값 사이의 연결을 의미힌다.

즉, 프로퍼티는 객체를 구성하는 블록(내부의 속성)들이다.

프로퍼티의 종류는 5가지로 나눌 수 있다.

  1. 인스턴스 저장 프로퍼티
  2. 타입 저장 프로퍼티
  3. 인스턴스 연산 프로퍼티
  4. 타입 연산 프로퍼티
  5. 지연 저장 프로퍼티

저장 프로퍼티

저장 프로퍼티는 단순히 값을 저장하고 있는 프로퍼티 입니다.

let 키워드로 불변, var 키워드로 가변 프로퍼티를 만들 수 있습니다.

struct Coordinate{
	//불변 프로퍼티로 선언 후 변경 불가
	let x: Int
	//가변 프로퍼티로 값 변경이 자유로움
	var t: Int
}

var pointA = Coordinate(x: 0, y: 4)
pointA.x = 2 //error 불변 프로퍼티는 변경 불가능.
porintA.y = 9

 

타입 프로퍼티

타입 프로퍼티 선언을 위해 static 및 class의 두가지 형태를 사용합니다.

class 형태는 static과 달리 자식클래스에서 상속받아 재정의가 가능합니다.

물론 값 타입인 열거형과 구조체에서는 상속이나 재정의가 불가능하니,

class의 기능은 무용지물입니다 ㅠ

class Intro {
    static var name: String{
        return "녹색하늘"
    }
    class var age: Int{
       return 20
    }

    func print(){
        Swift.print(" \(Intro.name)은 \(Intro.age)살 입니다. ")
    }
}

class Intro2 : Intro {
    override class var age: Int{
       return 25
    }
	/*
	static 타입 변수는 재정의가 불가능합니다.
	override class var name: Int{
	return "푸른하늘"
    }
	*/
    override func print(){
        Swift.print(" \(Intro.name)은 \(Intro2.age)살 입니다. ")
    }
}

var a : Intro = Intro()
var b : Intro2 = Intro2()

a.print() // 녹색하늘은 20살 입니다.
b.print() // 녹색하늘은 25살 입니다.

 

연산 프로퍼티

연산 프로퍼티는 실제 값을 저장하고 있는게 아니라, getter와 옵셔널한 setter값을 제공해서

값을 탐색하고 다른 프로퍼티값 또한 설정할 수 있니다.

연산 프로퍼티는 var로만 선언이 가능합니다.

struct Exchange {
    var rate: Double = 1200
    var dollar: Double = 0
    var won : Double{
        get{
            return dollar * rate
        }
        set{
						//set (매개변수명)을 입력하지 않았을시 자동으로 newValue사용가능
            dollar = newValue / rate
        }
    }
}

var myMoney = Exchange()
//won을 직접 입력하는것도 가능합니다.
myMoney.won = 10000
print (myMoney.won) //10000.0

myMoney.dollar = 11
print(myMoney.won) //13200.0

 

저장 프로퍼티와 연산 프로퍼티의 기능은

함수, 메서드, 클로저, 타입 등 외부에 위치한 지역/전역 변수에도 모두 사용가능합니다.

var rate = 1000
var dollar = 40
var exchange: Int{
	return rate * dollar
}
print(exchange) // 40000

 

프로퍼티 감시자

프로퍼티의 값이 변경될 때 동작합니다.

값의 변경전엔 willSet 블럭이, 직후엔 didSet이 호출됩니다.

변경 전후로 모두 암시적 매개변수 newValue, oldValue를 사용가능합니다.

struct Exchange {
	var rate: Double = 1200 {
		willSet{ print("환율이 \(rate)에서 \(newValue)로 변경될 예정입니다.")}
		didSet{ print("환율이 \(oldValue)에서 \(rate)로 변경됬습니다.") }
	}
	var dollar: Double = 0
	var won : Double{
		get{ return dollar * rate }
		set{ dollar = newValue / rate }
	}
}

var myMoney = Exchange()
myMoney.rate = 1100
//환율이 1200.0에서 1100.0로 변경될 예정입니다.
//환율이 1200.0에서 1100.0로 변경됬습니다.

 

 


공부에 도움을 준 사이트들

 

전반적인 공부 가이드라인

https://yagom.net/

 

야곰닷넷 - yagom.net

iOS 개발자들의 놀이터, 배움터, 모임터, 기록보관소 야곰닷넷입니다.

yagom.net

애플 공식 스위프트 언어 가이드 한국어 변역 사이트

https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties

 

프로퍼티 (Properties)

 

jusung.gitbook.io

property에 대한 추가 이해

https://m.blog.naver.com/magnking/220966405605

 

[JavaScript] property란 무엇인가?

property?!JavaScript를 공부하다보면 property(프로퍼티)라는 단어를 자주 듣게 됩니다. 만약 property...

blog.naver.com

https://negabaro.github.io/archive/js-property

 

javascript Property란?

 

negabaro.github.io

https://enterkey.tistory.com/165

 

"변수(Variable)"와 "프로퍼티(property)"의 차이가 무엇인가요?

프로퍼티는 무엇인가? 변수란 무엇인가? 둘 간의 차이가 있다면 어떤 것인가? 기본적인 질문이다. 이것은 언어를 이해하기 위한 기본적인 내용이지만, 대개 자바스크립트에서는 그냥 대충 넘어

enterkey.tistory.com

반응형