Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Mobile
- 이터레이터패턴
- 옵저버패턴
- 팩토리메서드패턴
- 어댑터패턴
- DispatchQueue
- 상태패턴
- 스트래터지패턴
- unowned
- 프록시패턴
- RxSwift
- 디자인패턴
- 커맨드패턴
- ios
- Scenedelegate
- SWIFT
- 데코레이터패턴
- Lifecycle
- Xcode
- cocoapods
- 템플릿메서드
- 추상팩토리패턴
- 컴포지트패턴
- 싱글턴패턴
- WKWebView
- 컴파운드패턴
- 스테이트패턴
- 파사드패턴
- ViewController
- 전략패턴
Archives
- Today
- Total
ios dev kangwook.
Swift) Property 본문
Property
Property는 값을 특정 클래스, 구조체, 열거형과 연결한다. Property에는 크게 3가지 종류가 있다!
- Stored Property(저장 프로퍼티)
- Computed Property(연산 프로퍼티)
- Type Property(타입 프로퍼티)
Stored Property
- 상수와 변수값을 인스턴스의 일부로 저장하고, 클래스와 구조체에서만 사용한다.
- 클래스의 일부가 되는 상수(Constant) / 변수(Variable)라고 할 수 있겠다.
Stored Property(struct)
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLength(firstValue: 0, length: 3)
rangeOfThreeItems.firstValue = 6 // rangeOfThreeItems가 상수로 선언되면 이 부분도 error 발생
rangeOfThreeItems.length = 10 // error!
Stored Property(class)
class FixedLengthRange {
var firstValue: Int
let length: Int
init(firstValue: Int, length: Int) {
self.firstValue = firstValue
self.length = length
}
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
rangeOfThreeItems.firstValue = 3 // class는 let으로 바꿔도 이 부분이 error가 나지 않음
rangeOfThreeItems.length = 10 // error!
lazy stored property
- lazy로 선언된 프로퍼티는 인스턴스에 접근하기 전까지 생성이 되지 않는 것을 뜻한다.
- lazy는 항상 변수로서 선언해야한다.
class DataImporter {
var filename = "data.txt"
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
// 여기까지 진행해도 DataImporter의 인스턴스인 importer 프로퍼티는 생성되지 않았음
// importer 프로퍼티에 처음 액세스 할 때 만들어지게 됨
print(manager.importer.filename)
Computed Property
- 값을 연산하는 프로퍼티라고 보면 된다.
- 특정 연산을 수행하여 값을 "반환"하기 때문에 return을 써서 값을 반환해준다.
- 클래스, 구조체, 열거형에서 모두 사용가능하고, getter와 setter를 통해 다른 프로퍼티와 간접적으로 값을 검색하고 세팅하는 프로퍼티이다.
class Point {
var tempX: Int = 1
var x: Int {
get {
return tempX
}
set(newValue) {
tempX = newValue * 2
}
}
}
var p: Point = Point()
p.x = 12
print(p.x) // 24
// p.x = 12를 하면 x에 값이 저장되는 것이 아니라 연산이 되어 newValue * 2를 한 24가 저장
Read-Only Computed Property
- set만을 가질 수 없지만 get만을 가질 수는 있다(말 그대로 Read-Only)
struct Cuboid {
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
Type Property
- 프로퍼티를 타입 자체와 연결하는 것. 인스턴스와 연결하는 것이 아니다.
- 저장 타입 프로퍼티와 연산 타입 프로퍼티로 이루어진다.
- class / static을 프로퍼티 앞에 삽입함으로써 선언하는데 차이점이 있다.
- class 타입의 경우 프로퍼티를 오버라이딩할 수 있고 static의 경우 불가능하다!
struct SomeStructure {
...
}
enum SomeEnumeration {
...
}
class SomeClass {
...
}
// 타입 프로퍼티는 인스턴스가 아닌 타입자체를 통해 프로퍼티에 접근
print(SomeStructure.storedTypeProperty)
// Prints "Some Value."
SomeStructure.storedTypeProperty = "Another Value."
print(SomeStructure.storedTypeProperty)
// Prints "Another Value."
print(SomeEnumeration.computedTypeProperty)
// Prints "6"
print(SomeClass.computedTypeProperty)
// Prints "27"
참조
'Swift' 카테고리의 다른 글
Swift) Enumeration (0) | 2022.10.04 |
---|---|
Swift) Initialization (0) | 2022.10.02 |
Swift) Semaphore (0) | 2022.09.25 |
Swift) DispatchQueue (0) | 2022.09.22 |
Swift) Concurrency, GCD (0) | 2022.09.20 |
Comments