Swift에서의 super 키워드

jeongmuyamette·2025년 3월 9일

TIL

목록 보기
61/72
post-thumbnail

Swift에서의 super 키워드

정의

Swift에서 super는 부모 클래스(상위 클래스)의 메서드, 프로퍼티, 서브스크립트에 접근할 수 있게 해주는 특별한 키워드입니다. 자식 클래스(하위 클래스)에서 부모 클래스의 구현을 호출하거나 접근할 때 사용합니다.

비유

super는 가족 관계에서 "부모에게 물어보기"와 같습니다. 자식이 스스로 해결할 수 없는 일이 있거나, 부모가 이미 알고 있는 정보가 필요할 때, 자식은 부모에게 도움을 요청합니다. 마찬가지로 자식 클래스는 super 키워드를 통해 부모 클래스의 기능을 활용할 수 있습니다.

예시

1. 메서드 오버라이드와 super 사용

class Animal {
    func makeSound() {
        print("동물이 소리를 냅니다")
    }
}

class Dog: Animal {
    override func makeSound() {
        // 부모 클래스의 메서드를 먼저 호출
        super.makeSound()
        // 추가 기능 구현
        print("멍멍!")
    }
}

let myDog = Dog()
myDog.makeSound()
// 출력:
// 동물이 소리를 냅니다
// 멍멍!

2. 초기화(initializer)에서 super 사용

class Vehicle {
    var numberOfWheels: Int
    
    init(wheels: Int) {
        self.numberOfWheels = wheels
    }
}

class Car: Vehicle {
    var brand: String
    
    init(brand: String) {
        self.brand = brand
        // 부모 클래스의 초기화 메서드 호출
        super.init(wheels: 4)
    }
}

let myCar = Car(brand: "현대")
print("내 차는 \(myCar.brand) 브랜드이고, \(myCar.numberOfWheels)개의 바퀴가 있습니다.")
// 출력: 내 차는 현대 브랜드이고, 4개의 바퀴가 있습니다.

3. UIKit에서의 super 사용 (prepareForReuse 예시)

class CustomTableViewCell: UITableViewCell {
    
    override func prepareForReuse() {
        // 부모 클래스의 prepareForReuse 메서드를 먼저 호출
        super.prepareForReuse()
        
        // 추가적인 초기화 작업 수행
        // ...
    }
}

super의 중요성

  1. 부모 클래스의 기능 유지: super를 사용하여 부모 클래스의 중요한 기능을 실행한 후 자식 클래스에서 추가 기능을 구현할 수 있습니다.

  2. 초기화 과정의 안전성: 초기화 메서드에서 super.init()을 호출하면 부모 클래스가 올바르게 초기화되어 안전한 객체 생성이 보장됩니다.

  3. 코드 재사용: 부모 클래스에 이미 구현된 기능을 재사용하여 코드 중복을 줄일 수 있습니다.

  4. 프레임워크 호환성: UIKit과 같은 프레임워크를 사용할 때, super 호출을 통해 프레임워크의 기본 동작을 유지하면서 추가 기능을 구현할 수 있습니다.

super를 사용하지 않으면 부모 클래스의 중요한 기능이 실행되지 않아 예상치 못한 버그가 발생할 수 있으므로, 메서드를 오버라이드할 때는 적절한 시점에 super 호출을 포함하는 것이 중요합니다.

0개의 댓글