본문 바로가기

앱 개발/IOS

[IOS 프로그래밍을 위한 스위프트 기초] 2단원 19. 프로퍼티

19. 프로퍼티

정의

프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.

다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다.

연산 프로퍼티는 var로만 선언할 수 있다.

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)입니다")
    }
    */
    
    // 읽기 전용 인스턴스 연산 프로퍼티
    var selfIntroduction: String {
    	get {
        	return "저는 \(self.class)반 \(name)입니다"
        }
    }
    
    /*
    // 타입 메서드
    static func selfIntroduce() {
    	print("학생타입입니다")
    }
    */
    
    // 읽기 전용 타입 연산 프로퍼티
    // 읽기전용에서는 get을 생략할 수 있다.
    static var selfIntroduction: String }
    	return "학생타입입니다"
    }
}

 

사용

타입 연산 프로퍼티 사용

print(Student.selfIntroduction)

결과: 학생타입입니다

인스턴스 생성

var fuyukawa: Student = Student()
fuyukawa.koreanAge = 10

인스턴스 저장 프로퍼티 사용

fuyukawa.name = "fuyukawa"
print(fuyukawa.name)

결과: fuyukawa

인스턴스 연산 프로퍼티 사용

print(fuyukawa.selfIntroduction)

결과: 저는 Swift반 fuyukawa입니다.

print("제 한국나이는 \(fuyukawa.koreanAge)살이고, 미국나이는 \(fuyukawa.westernAge)살입니다.")

결과: 제 한국나이는 10살이고, 미국나이는 9살입니다.

 

응용

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

var moneyInMyPocket = Money()

moneyInMyPocket.won = 11000

print(moneyInMyPocket.won)
// 11000

moneyInMyPocket.dollar = 10

print(moneyInMyPocket.won)
// 11000

여기서 set에 특별한 이름을 써주지 않으면 newValue가 암시적으로 들어오게 된다.

 

지역변수, 전역변수

저장 프로퍼티와 연산 프로퍼티의 기능은 함수, 메서드, 클로저, 타입 등의 외부에 위치한 지역/전역 변수에도 모두 사용할 수 있다.

var a: Int = 100
var b: Int = 200
var sum: Int {
	return a + b
}
print(sum) // 300

 

 

 

 

 

 

ⓒ NAVER Boostcourse. All Rights Reserved.