Swift: self, Self, static, class

나이든별 / Oldstar·2022년 1월 9일
1

Swift / iOS Keywords

목록 보기
8/13

참조 : https://stackoverflow.com/questions/27863810/distinction-in-swift-between-uppercase-self-and-lowercase-self
참조 : https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#grammar_class-declaration

  • 먼저 self는, 모든 인스턴스가 암시적으로 생성하는 프로퍼티이다. 자기 자신을 가리키는 것으로, 클래스나 구조체 등의 인스턴스 내에서 사용할 수 있다.
  • 구조체나 열거형일 경우, self 프로퍼티를 사용해 자기 자신으로 교체가 가능하다. 클래스는 참조 타입이라, self 프로퍼티에 다른 참조를 할당할 수 없다.
  • Self는 타입이다. 특정한 타입이 아니라, 타입의 이름을 반복해 작성하지 않고 현재 타입을 가리키는 코드를 사용할 수 있게 해 준다.
  • Self는 클래스, 구조체, 열거형에 모두 사용할 수 있다.
  • class MyClass { func myType() -> Self { return self } }라면
    let a = MyClass() ; a.myType의 결과는 MyClass가 된다는 것.
  • 한 마디로 말해서, self와 Self의 차이는 인스턴스를 가리키냐 타입을 가리키냐이다.
  • 만약 MyClass에 var myVariable = 0이 있다면, 클래스 안에서 Self.myVariable로 가리킬 수 없고, self.myVariable로 가리켜야 한다. myVariable은 인스턴스이고, Self는 타입이기 때문.
  • 여기서 static이 등장할 수 있다. static은 타입 프로퍼티 혹은 타입 메서드를 만들 때 사용한다.
  • 만약 myType() 함수가 static하다면, a라는 MyClass 인스턴스를 만들지 않아도 MyClass.myType()을 불러올 수 있다.
  • 마찬가지로 static var myStaticVar = 0이라면, Self.myStaticVar로 클래스 안에서 지칭할 수 있다.
  • static과 class 접두어의 차이는, static은 상속이 불가능하고 class는 상속이 가능하다는 것이다.
profile
함께 나아가고자 하는 사람

1개의 댓글

comment-user-thumbnail
2022년 10월 6일

오 self 찾았는데 첫번째가 나별!

답글 달기