써니쿠키의 IOS 개발일기

[swift] static 은 언제쓰지??? 타입메서드 / 타입프로퍼티 본문

swift, Ios

[swift] static 은 언제쓰지??? 타입메서드 / 타입프로퍼티

sunnyCookie 2022. 8. 25. 14:16

타입 프로퍼티 / 메서드 & 인스턴스 프로퍼티 / 메서드

타입프로퍼티/메서드를 이해하기 위해서 인스턴스 프로퍼티/메서드 와 비교해 보자!!

  • 타입메서드/ 타입프로퍼티 = 타입에 직접 사용
  • 인스턴스 메서드/ 인스턴스 프로퍼티 = 인스턴스생성후 인스턴스에 사용

이렇게 말하면 이해하기 힘들 수 있으니 예시를 보자!

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 가능

참고문서:
https://varyeun.tistory.com/entry/%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8%EC%97%90%EC%84%9C-static-%ED%82%A4%EC%9B%8C%EB%93%9C%EB%9E%80-static-in-swift

반응형
Comments