HIT해

[Swift 기초문법 - 15] final 본문

Swift/Swift 기초문법

[Swift 기초문법 - 15] final

힛해 2024. 7. 12. 00:28
728x90

Swift에서 final 키워드는 클래스, 메서드, 그리고 속성에 적용될 수 있는 중요한 키워드다. final 키워드를 사용하면 해당 클래스나 메서드, 속성을 더 이상 상속하거나 재정의할 수 없게 만든다.

final 클래스

final 클래스를 선언하면 이 클래스를 상속받는 다른 클래스를 만들 수 없다. 이는 주로 클래스의 동작을 고정하고, 무분별한 상속을 방지하며, 코드의 안전성을 높이기 위해 사용된다.

final class Animal {
    var name: String

    init(name: String) {
        self.name = name
    }

    func sound() {
        print("동물이 소리를 냅니다.")
    }
}

// 아래 코드는 컴파일 오류를 발생시킵니다.
// class Dog: Animal {// }

let myAnimal = Animal(name: "Tiger")
myAnimal.sound()// 동물이 소리를 냅니다.

위 예제에서 Animal 클래스는 final 키워드로 선언되었기 때문에, 다른 클래스가 이를 상속받을 수 없다.

final 메서드 및 속성

final 키워드는 클래스뿐만 아니라 메서드와 속성에도 사용할 수 있다. 이는 서브클래스에서 특정 메서드나 속성을 재정의하지 못하도록 만드는 데 유용하다.

class Vehicle {
    final var speed: Double = 0.0

    final func describe() -> String {
        return "현재 속도는 \\(speed)km/h 입니다."
    }
}

class Car: Vehicle {
// 아래 코드는 컴파일 오류를 발생시킵니다.
// override var speed: Double {
//     get { return super.speed }
//     set { super.speed = newValue }
// }

// override func describe() -> String {
//     return "자동차 속도는 \(speed)km/h 입니다."
// }
}

 

위 예제에서 Vehicle 클래스의 speed 속성과 describe 메서드는 final로 선언되었기 때문에, Car 클래스에서 이를 재정의하려 하면 컴파일 오류가 발생한다.

final 키워드의 장점

안전성: 클래스, 메서드, 속성을 final로 선언함으로써 의도치 않은 상속 및 재정의를 방지할 수 있다.

성능 향상: 컴파일러는 final로 선언된 클래스나 메서드를 더 효율적으로 최적화할 수 있다. 이는 실행 성능 향상으로 이어질 수 있다.

명확성: 코드를 읽는 사람에게 이 클래스나 메서드가 더 이상 확장되지 않음을 명확하게 전달할 수 있다.

결론

Swift에서 final 키워드는 클래스, 메서드, 속성의 상속과 재정의를 방지하여 코드의 안전성과 성능을 높이는 데 유용하다. 이를 통해 더 명확하고 신뢰성 있는 코드를 작성할 수 있다. final 키워드를 적절히 활용하여 코드의 일관성을 유지하고, 불필요한 상속을 방지해 보자!