프로퍼티

손호준·2022년 6월 13일
0

swift

목록 보기
11/12

프로퍼티

프로퍼티는 클래스, 구조체, 열거형과 관련된 값. 타입과 관련된 값을 저장, 연산 가능.

프로퍼티의 종류

  • 인스턴스 저장 프로퍼티
  • 타입 저장 프로퍼티
  • 인스턴스 연산 프로퍼티
  • 타입 연산 프로퍼티
  • 지연 저장 프로퍼티

정의와 사용

프로퍼티는 구조체, 클래스, 열거형 내부에 구현 가능. 하지만 열거형 내부에는 연산 프로퍼티만 구현 가능. 연산프로퍼티는 var로만 선언 가능하고, 읽기 전용으로 구현할 수 있지만, 쓰기 전용으로는 구현 불가. 읽기 전용으로 구현하려면 get 블럭을 작성하면되는데 이 get 블럭은 생략 가능. 읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set 블럭을 모두 구현 해주면 됨.

지역변수 및 전역변수

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

///정의
struct Student {
	
    //인스턴스 저장 프로퍼티
    var name: String = ""
    var `class`: String = "Swift"
    var koreanAge: Int = 0
    
    //인스턴스 연산 프로퍼티
    var westernAge: Int {
    	get {
    		return koreanAge - 1
    	}
    
   	 set(inputValue) {
    		koreanAge = inputVaule + 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 nylonmask: Student = Student()
nylonmask.koreanAge = 10

//인스턴스 저장 프로퍼티 사용
nylonmask.name = "nylonmask"
print(nylonmask.name)
//nylonmask

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

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

///응용

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

var moneyInMyPocket = Money()

moneyInMyPocket.won = 11000.0

print(moneyInMyPocket.won)
//11000.0

moneyInMyPocket.dollar = 10

print(moneyInMyPocket.won)
//11000.0

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

var a: Int = 100
var b: Int = 200
var sum: Int {
	return a + b
}

print(sum) //300
profile
Rustacean🦀/Data engineer💻

0개의 댓글