본문 바로가기

iOS/Swift

Static VS Final

반응형

Swift에서 static 및 final은 속성, 메서드 및 클래스의 동작과 액세스를 제어하기 위해 서로 다른 컨텍스트에서 사용되는 두 개의 키워드입니다. 예제와 사용 사례를 통해 각각을 살펴보겠습니다.

 

Static

static 키워드는 클래스나 구조체의 인스턴스가 아닌 클래스나 구조체 자체에 속하는 속성과 메서드를 정의하는 데 사용됩니다. 인스턴스가 없어도 클래스 또는 구조체 이름을 사용하여 액세스할 수 있습니다.

정적 속성 및 메서드의 예:

class SampleClass {
    static var staticValue: Int = 10
    
    static func staticFunction() {
        print("This is a static function")
    }
}

// static 속성과 함수에 접근하는 방법
print(SampleClass.staticValue) // 10
SampleClass.staticFunction() // This is a static function

Static 사용 사례:

  • 싱글톤 패턴: 정적 속성을 사용하여 클래스의 공유 인스턴스를 구현할 수 있습니다.
  • 유틸리티 메서드: 정적 메서드는 인스턴스별 데이터에 의존하지 않는 유틸리티 함수를 만드는 데 유용합니다.
  • 상수: 클래스 또는 구조체와 연결되지만 인스턴스에만 국한되지 않는 상수를 선언합니다.

Final

final 키워드는 클래스, 메서드 또는 속성이 다른 클래스나 구조체에 의해 재정의되거나 하위 클래스화될 수 없음을 나타내는 데 사용됩니다. 상속에 대한 제어 수준을 제공하고 추가 수정을 방지하는 데 사용됩니다.

최종 클래스 및 메소드의 예:

class BaseClass {
    final func doSomething() {
        print("Doing something in the base class")
    }
}

class SubClass: BaseClass {
    // 최종 메서드를 재정의할 수 없으므로 컴파일 오류가 발생합니다.
    // func doSomething() {
    //     print("Attempting to override")
    // }
}

let baseInstance = BaseClass()
baseInstance.doSomething() // Doing something in the base class

let subInstance = SubClass()
subInstance.doSomething() // Doing something in the base class

Final 사용 사례:

  • 하위 클래스화 방지: 클래스를 더 이상 하위 클래스화할 수 없도록 하려면 해당 클래스를 최종 클래스로 표시하세요.
  • 메서드 구현: 클래스의 메서드에 final을 사용하면 하위 클래스에서 재정의되는 것을 방지할 수 있습니다. 
  • 클래스 구현: 클래스에 final를 사용하면 더이상 해당 클래스를 상속 받는 하위 클래스를 만들 수 없습니다.

요약하면 static은 유형 자체에 속하는 속성 및 메서드에 사용되는 반면 final은 메서드 및 클래스의 추가 상속이나 재정의를 방지하는 데 사용됩니다. 이러한 키워드를 언제, 어떻게 사용하는지 이해하면 더욱 강력하고 유지 관리가 쉬운 Swift 코드를 디자인하는 데 도움이 됩니다.

반응형