써니쿠키의 IOS 개발일기
[swift] static 은 언제쓰지??? 타입메서드 / 타입프로퍼티 본문
타입 프로퍼티 / 메서드 & 인스턴스 프로퍼티 / 메서드
타입프로퍼티/메서드를 이해하기 위해서 인스턴스 프로퍼티/메서드 와 비교해 보자!!
- 타입메서드/ 타입프로퍼티 = 타입에 직접 사용
- 인스턴스 메서드/ 인스턴스 프로퍼티 = 인스턴스생성후 인스턴스에 사용
이렇게 말하면 이해하기 힘들 수 있으니 예시를 보자!
class A {
let instanceProperty : Int = 1 //인스턴스프로퍼티
static let typeProperty : Int = 2 //타입프로퍼티
func instanceMethod() { //인스턴스메서드
print("Use instanceMethod")
}
static func typeMethod() { //타입메서드
print("Use typeMethod")
}
}
A라는 클래스에
인스턴스프로퍼티와, static을 이용한 타입프로퍼티를 각각 선언해주었고
인스턴스메서드와 static을 이용한 타입메서드도 생성해주었다.
(static 대신 class를 사용할 수도 있는데 둘의 차이는 밑에서 정리하겠다)
인스턴스 프로퍼티/메서드는
말그대로 인스턴스를 생성해서(a) 인스턴스에 붙여서 사용이가능하고
타입프로퍼티/메서드는
클래스타입A에 직접 붙여서 사용할 수 있다.
//인스턴스 생성후 인스턴스(a)에 사용해보기
let a = A()
print(a.instanceProperty) // 1
a.instanceMethod() // Use instanceMethod
print(a.typeProperty) //오류
a.typeMethod() //오류
// 타입(A)에 직접 사용해보기
print(A.typeProperty) // 2
A.typeMethod() // Use typeMethod
print(A.instanceProperty) //오류
A.instanceMethod() // 오류
오류내용을 보면
" instance member 'instanceMethod' cannot be used on type 'A';"
즉 인스턴스멤버인 인스턴스메서드는 타입A 에서 사용될수 없다"Static member 'typeMethod' cannot be used on instance of type 'A'"
static멤버인 타입메서드는 A타입의 인스터스인 a에서 사용될수 없다.
static과 class의 차이
둘의 차이는 override의 가능성이다.
- static : override 불가능
- class : override 가능
'swift, Ios' 카테고리의 다른 글
[swift]열거형 연관된 값(Associated Values) (0) | 2022.08.30 |
---|---|
[swift] 제네릭? generic (0) | 2022.08.26 |
[swift] 재귀함수 (0) | 2022.08.24 |
[swift] enumerated(), forEach() (0) | 2022.08.23 |
[swift] Array 멤버 대괄호없이 한 줄로 출력하는 방법 (joind, map) (0) | 2022.08.19 |