프로퍼티

JG Ahn·2024년 10월 16일

swift 기초

목록 보기
17/23

1. 프로퍼티

  • 프로퍼티는 구조체, 클래스, 열거형 내부에 구현 (열거형은 연산 프로퍼티만 구현 가능)
  • 프로퍼티 유형
    • 저장 프로퍼티
      • 종류 : 인스턴스 저장 프로퍼티 / 타입 저장 프로퍼티 / 지연 저장 프로퍼티
    • 연산 프로퍼티
      • 종류 : 인스턴스 연산 프로퍼티 / 타입 연산 프로퍼티

2. 정의

  • 저장 프로퍼티 : class, struct 안에서 선언된 변수 또는 상수
    • 열거형(enum)은 선언 및 사용 불가
  • 연산 프로퍼티 : 값을 직접 저장하지 않고 호출될 때 계산된 값을 반환
    • class, struct, enum 사용 가능
    • var로만 선언 가능
    • 연산 프로퍼티는 읽기전용(getter)으로 구현 가능
      하지만 쓰기전용(setter)으로만 구현하는 것은 불가
  • set 블럭에서 암시적 매개변수 newValue 사용 가능
struct Student {

    //인스턴스 저장 프로퍼티
    var name: String = ""
    var `class`: String = "Swift" // ``(백틱) -> 예약어를 식별자(변수명)로 사용할 수 있게 함
    var koreanAge: Int = 0

    //인스턴스 연산 프로퍼티
    var westernAge: Int {
        get {
            return koreanAge - 1
        }

        set(inputValue) {
            koreanAge = inputValue + 1
        }
    }

    //타입 저장 프로퍼티
    static var typeDescription: String = "학생"

    /*
    //인스턴스 메소드
    func selfIntroduce() {
        print("저는 \(self.class)반 \(name)입니다")
    }
    */
    
    //읽기전용 인스턴스 연산 프로퍼티
    //위의 selfIntroduce() 메소드 대체 가능
    var selfIntroduction: String {
        get {
            return "저는 \(self.class)\(name)입니다"
        }
    }

    /*
    //타입 메소드
    static func selfIntroduce() {
        print("학생타입입니다")
    }
    */

    //읽기전용 타입 연산 프로퍼티
    static var selfIntroduction: String {
        /*읽기전용이라서 get 생략 가능
        get {
            return "학생타입입니다"
        }
        */
        return "학생타입입니다"
    }   
}

//타입 연산 프로퍼티 사용
print(Student.selfIntroduction) //결과 : 학생타입입니다

//인스턴스 생성
var std: Student = Student()
std.koreanAge = 30

//인스턴스 저장 프로퍼티 사용
std.name = "쏘니"

//인스턴스 연산 프로퍼티 사용
print(std.selfIntroduction) //결과 : 저는 Swift반 쏘니입니다

3. 응용

struct Money {
    var currencyRate: Double = 1100
    var dollar: Double = 0
    var won: Double {
        get {
            return dollar * currencyRate
        }

        
        set {  //암시적 매개변수 newValue 사용
            dollar = newValue / currencyRate 
        }
    }
}

var moneyInMyPocket = Money()

moneyInMyPocket.won = 11000

print(moneyInMyPocket.won) //결과 : 11000

moneyInMyPocket.dollar = 15

print(moneyInMyPocket.won) //결과 : 16500

4. 지역변수 및 전역변수

  • 저장/연산 프로퍼티 기능은 지역/전역 변수에 사용 가능
var a:Int = 100
var b:Int = 150
var sum: Int {
	return a + b
}

print(sum) //결과 " 250

0개의 댓글