새소식

iOS/Swift

[기본문법] 프로퍼티

  • -

프로퍼티 : 클래스, 구조체 또는 열거형등에 소속된 값

 

저장프로퍼티 : 인스턴스의 변수나 상수

  • #1 구조체는 값타입이기 때문에 상수로 선언하면 변수로 선언된 프로퍼티라고 해도 값이 변경되지 않는다
  • #2 클래스는 참조타입이기 때문에 상수로 선언해도 프로퍼티의 값을 변경할 수 있다. 물론 상수 프로퍼티는 변경 불가.
//저장프로퍼티


//구조체 선언
struct Dog{
    var name: String
    let gender: String
}

//구조체 사용
var dog = Dog(name: "dak", gender: "Male")
dog.name = "buk"
//dog.gender = "female" // Error 상수는 초기화 불가능

//출력
print(dog)


//#1 상수 구조체
let dog2 = Dog(name: "jal", gender: "male")
//dog2.name = "jak" //Error 상수 구조체의 프로퍼티 초기화 불가능



//클래스 선언
class Cat{
    var name: String
    let gender: String
    
    init(name: String, gender: String){
        self.name = name
        self.gender = gender
    }
}

//#2 상수 클래스
let cat = Cat(name: "kat", gender: "male")
cat.name = "hak"
cat.name      //"hak"

연산프로퍼티 : 특정연산을 실행한 결과값

  • set 을 사용하지 않고 get 만 선언해도 작동한다
  • set의 매개변수 이름을 설정하지 않으면 newValue 로 디폴트값이 설정된다 set { newValue... } 
import UIKit


//연산프로퍼티

//구조체 선언
struct Stock{
    var averagePrice: Int
    var quanity: Int
    
    //연산프로퍼티 선언
    var purchasePrice: Int{
        get{
            return averagePrice * quanity
        }
        set(newPrice){
            averagePrice = newPrice / quanity
        }
    }
    
}

//구조체 생성
var stock = Stock(averagePrice: 2300, quanity: 3)

//값 확인
print(stock)           //"Stock(averagePrice: 2300, quanity: 3)\n"
  

//get에 접근
stock.purchasePrice    //6900

//set에 접근
stock.purchasePrice = 3000

//set 활성화로 변경된 averagePrice
stock.averagePrice     //1000


-------------------------------
Stock(averagePrice: 2300, quanity: 3)

프로퍼티옵저버 : 프로퍼티값의 변화를 관찰하고 반영, 새로운값이 기존값이 같더라도 호출

  • 저장프로퍼티, 오버라이딩이 된 저장프로퍼티, 오버라이딩이 된 계산프로퍼티에서만 사용가능
  • wilSet 옵저버:
    • 값이 저장되기 직전에 호출
    • 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달
    • 매개변수이름 기본값: newValue 
  • didSet 옵저버:
    • 값이 저장된 후에 호출
    • 프로퍼티의 기존값이 상수 매개변수로 전달
    • 매개변수이름 기본값: oldValue
//프로퍼티옵저버
//클래스 선언
class Account {
    var credit: Int = 0{
        //소괄호 이름 지정
        willSet {
            print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
        }
        
        didSet {
            print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
        }
    }
}

//클래스 생성
var account = Account()
account.credit = 1000


------------------------------
잔액이 0원에서 1000원으로 변경될 예정입니다.
잔액이 0원에서 1000원으로 변경되었습니다.

 

타입프로퍼티 

  • 특정 타입에서 사용되는 프로퍼티
  • 인스턴스 생성 없이 객체 내의 프로퍼티에 접근 할 수 록 있게 함
  • static 키워드를 사용하여 정의
//타입프로퍼티

//구조체 선언
struct SomeStructure {
    static var storedTypeProperty = "Some value." //스토어
    static var computedTypeProperty: Int {  //컴퓨티드
        return 1
    }
}

//값 확인
SomeStructure.computedTypeProperty   // 1
SomeStructure.storedTypeProperty     //"Some value."


//프로퍼티 생성 없이 값 변환
SomeStructure.storedTypeProperty = "hello"
SomeStructure.storedTypeProperty     //"hello"

End

'iOS > Swift' 카테고리의 다른 글

[기본문법] 상속  (0) 2022.12.16
[기본문법]클래스와 구조체 비교  (0) 2022.12.14
[기본문법]초기화 구문 init  (0) 2022.10.28
[기본문법] 클래스  (0) 2022.10.28
[기본문법]구조체  (0) 2022.10.28
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.