1. 프로퍼티의 종류
•인스턴스 저장 프로퍼티
•타입 저장 프로퍼티
•인스턴스 연산 프로퍼티
•타입 연산 프로퍼티
•지연 저장 프로퍼티
2. 정의와 사용
•프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있음
•다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있음
•연산 프로퍼티는 var로만 선언할 수 있음
•연산 프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없음
•읽기전용으로 구현하려면 get 블럭만 작성해주면 됨. 읽기전용은 get 블럭을 생략할 수 있음
•읽기, 쓰기 모두 가능하게 하려면 get 블럭과 set 블럭을 모두 구현해주면 됨
•set 블럭에서 암시적 매개변수 newValue를 사용할 수 있음
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 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("학생 타입입니다") } */ // 읽기전용 타입 연산 프로퍼티 // 읽기전용에서는 get을 생략할 수 있음 static var selfIntroduction: String { return "학생타입입니다" } } // 타입 연산 프로퍼티 사용 print(Student.selfIntroduction) // 학생타입입니다 // 인스턴스 생성 var jinun: Student = Student() jinun.koreanAge = 10 // 인스턴스 저장 프로퍼티 사용 jinun.name = "Jinun" print(jinun.name) // Jinun // 인스턴스 연산 프로퍼티 사용 print(jinun.selfIntoduction) // 저는 Swift반 Jinun입니다 print("제 한국나이는 \(jinun.koreanAge)살이고, 미국나이는 \(jinun.westernAge)살 입니다.") // 제 한국나이는 10살이고, 미국나이는 9살 입니다. | cs |
3. 응용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | struct Money { var currenyRate: Double = 1100 var dollar: Double = 0 var won: Double { get { return dollar * currencyRate } set { dollar = newValue / currencyRate } } } var moneyInMyPocket = Money() moenyInMyPocket.won = 11000 print(moneyInMyPocket.won) // 11000 moneyInMyPocket.dollar = 0 print(moneyInMyPocket.won) | cs |
4. 지역변수 및 전역변수
저장 프로퍼티와 연산 프로퍼티의 기능은 함수, 메서드, 클로저, 타입 등의 외부에 위치한 지역/전역 변수에도 모두 사용 가능
1 2 3 4 5 6 7 | var a: Int = 100 var b: Int = 200 var sum: Int { return a + b } print(sum) // 300 | cs |
제 나름대로 생각을 정리하며 포스팅합니다.
정보전달에 있어 차질이 생기는 것을 우려해 나름대로 확실하게 검증을 하고 포스팅하려고 노력합니다.
본 포스팅에 잘못된 정보가 있거나 수정해야할 내용이 있다면 댓글 또는 아래의 이메일로 알려주시면 감사하겠습니다.
E-mail : silent_lhr@naver.com
공감은 로그인이 필요없습니다.
공감은 저에게 포스팅을 이어나갈 수 있는 힘이 됩니다.
'프로그래밍 [KOR] > Swift' 카테고리의 다른 글
Swift의 상속 (0) | 2018.10.11 |
---|---|
Swift의 프로퍼티 감시자 (0) | 2018.10.11 |
Swift의 클로저 고급 (0) | 2018.10.11 |
Swift의 클로저 (0) | 2018.10.10 |
Swift의 값/참조 타입 (0) | 2018.10.10 |