이번달 내로 2020년 회고 쓸건데 이거 언제 다하고 쓰지...
프로퍼티와 메서드
- 프로퍼티
- 저장 프로퍼티
- 변수 or 상수
- 클래스와 구조체에 포함
- 연산 프로퍼티
- 연산을 실행한 결괏값
- 실제로 데이터 값을 갖지 않음
- 클래스, 구조체, 열거형에 포함
- getter/setter가 존재
- 왜 사용하는가?
- 메서드로 구현시, get/set Method 2개를 구현해야 하는데, 보다 훨씬 간편함
- 타입 프로퍼티
- 특정 타입에 사용
- static 키워드 사용
- 지연 저장 프로퍼티
- 처음으로 호출될 때, 초기화를 진행한다
- lazy var 키워드 사용
- lazy let은 사용할 수 없다 -> (let은 생성될 때, 초기화된 후로 변경될 수 없기 때문이 아닐까?)
- 여러 쓰레드가 동시에 접근 시, 여러번 초기화 가능성이 있다. -> Non-Thread-Safe
- 저장 프로퍼티
//연산 프로퍼티
struct Point{
var x: Float
var y: Float
var oppositePoint: Self{
get{
return Point(x: -x, y: -y)
}
//set은 생략가능 -> 읽기전용 프로퍼티로 선언/사용 가능
set(opposite){
x = -opposite.x
y = -opposite.y
}
}
}
프로퍼티 감시자
- 값이 새로 할당될 때마다 호출
- 저장/연산 프로퍼티에 사용 가능
- willset/didset 구현
- 현재 값과 같더라도 실행된다
- 오버라이드가 가능하다
class Account{
var credit: Int = 0{
willSet{
print("잔액이 \(credit)에서 \(newValue)로 변경될 것입니다")
}
didSet{
print("잔액이 \(oldValue)에서 \(credit)으로 변경되었습니다")
}
}
}
타입 프로퍼티
- 인스턴스가 아닌 각각의 타입 다체에 속하는 프로퍼티
- static let, static var 사용 가능하지만, 연산 프로퍼티는 var로만 선언 가능
- 반드시 초깃값을 설정해야 하며, 지연 연산된다
- 지연 저장 프로퍼티(lazy var)와는 다르게 다중 쓰레드 환경에서도 단 한번만 초기화 된다
메서드
- 인스턴스 메서드
- 인스턴스가 존재할 때만 사용 가능
- 구조체/열거형에서 인스턴스 내부 값(프로퍼티)을 변경하기 위해서는 mutating func로 선언
- 타입 메서드
- static func / class func 가 존재한다
- 둘다 같은 타입 메서드지만, static은 상속 불가, class는 상속 가능 타입 메서드이다
- 여기서의 Self는 인스턴스가 아닌 타입 자신을 의미한다
- static func / class func 가 존재한다
'Swift' 카테고리의 다른 글
[Swift] 클로저 - 스위프트 언어 및 문법(8) - feat.야곰's Swift Programming (0) | 2021.01.15 |
---|---|
[Swift] 인스턴스 - 스위프트 언어 및 문법(7) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 구조체/클래스 - 스위프트 언어 및 문법(5) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 옵셔널 - 스위프트 언어 및 문법(4) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 함수/메서드 - 스위프트 언어 및 문법(3) - feat.야곰's Swift Programming (0) | 2021.01.14 |