본문 바로가기
Apple/Apple_Swift

상속에 대한 기본 개념과 기능 누락 방지 방법

by LeviiOS 2024. 8. 7.
반응형

안녕하세요! 오늘은 Swift에서 상속을 사용할 때 부모 클래스의 기능이 상속 클래스에서 누락되지 않도록 하는 방법에 대해 이야기해보려고 합니다. 이 글에서는 상속의 기본 개념, 상속이 필요한 상황, 상속의 장단점, 그리고 기능 누락을 방지하는 방법에 대해 다루겠습니다.

 

Swift 상속의 기본 개념

상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받아 재사용하는 강력한 기능입니다. 이를 통해 코드의 재사용성을 높이고, 기존 클래스의 기능을 확장하거나 변경할 수 있습니다. 상속을 통해 우리는 더 깔끔하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

상속이 필요한 상황

상속은 다음과 같은 상황에서 유용하게 사용될 수 있습니다:

  1. 코드 재사용: 여러 클래스가 공통적으로 사용할 수 있는 기능을 부모 클래스에 정의하여 코드의 중복을 줄입니다.
  2. 기능 확장: 기존 클래스의 기능을 확장하거나 변경하고자 할 때, 상속을 통해 손쉽게 새로운 클래스를 만들 수 있습니다.
  3. 다형성: 다형성을 통해 부모 클래스 타입의 변수로 여러 자식 클래스의 인스턴스를 다룰 수 있습니다.

상속의 장단점

장점

  • 코드 재사용성: 중복되는 코드를 줄이고, 유지보수가 쉬워집니다.
  • 유연성: 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있습니다.
  • 다형성 지원: 부모 클래스 타입으로 다양한 자식 클래스의 객체를 다룰 수 있습니다.

단점

  • 복잡성 증가: 상속 계층이 깊어지면 코드의 이해와 디버깅이 어려워질 수 있습니다.
  • 강한 결합: 부모 클래스와 자식 클래스 간의 강한 결합으로 인해 부모 클래스의 변경이 자식 클래스에 영향을 줄 수 있습니다.
  • 오버라이딩 문제: 자식 클래스에서 부모 클래스의 메서드를 오버라이드할 때, 기능이 누락되거나 의도치 않은 동작이 발생할 수 있습니다.

기능 누락 방지 방법

상속을 사용할 때 부모 클래스의 기능이 상속 클래스에서 누락되는 경우를 방지하기 위해 다음과 같은 방법을 사용할 수 있습니다:

  1. 메서드 오버라이딩 (Method Overriding)

    상속 클래스에서 부모 클래스의 메서드를 재정의하면, 부모 클래스의 메서드가 호출되지 않고 상속 클래스의 메서드가 호출됩니다. 이때, super를 사용하여 부모 클래스의 메서드를 호출할 수 있습니다.

class Parent {
    func someMethod() {
        print("Parent method")
    }
}

class Child: Parent {
    override func someMethod() {
        super.someMethod()
        print("Child method")
    }
}

let instance = Child()
instance.someMethod()  // "Parent method" 출력 후 "Child method" 출력

 

2. 접근 제어 (Access Control)

부모 클래스의 특정 기능이 상속 클래스에서 접근할 수 없도록 제한될 수 있습니다. 이를 해결하기 위해서는 접근 제어자를 조정해야 합니다.

class Parent {
    fileprivate func someMethod() {
        print("Parent method")
    }
}

class Child: Parent {
    func accessParentMethod() {
        someMethod()
    }
}

let instance = Child()
instance.accessParentMethod()  // "Parent method" 출력

 

3. 초기화 메서드 (Initializers)

상속 클래스에서 부모 클래스의 초기화 메서드를 호출하지 않으면 부모 클래스의 일부 초기화 코드가 실행되지 않을 수 있습니다. 따라서, 상속 클래스의 초기화 메서드에서 super.init을 호출해야 합니다.

class Parent {
    var name: String

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

class Child: Parent {
    var age: Int

    init(name: String, age: Int) {
        self.age = age
        super.init(name: name)
    }
}

 

4. 프로퍼티 감시자 (Property Observers)

상속 클래스에서 부모 클래스의 프로퍼티 감시자를 재정의하면, 부모 클래스의 감시자가 호출되지 않을 수 있습니다. 이를 해결하기 위해서는 super.didSet을 호출할 수 있습니다.

class Parent {
    var value: Int = 0 {
        didSet {
            print("Parent didSet")
        }
    }
}

class Child: Parent {
    override var value: Int {
        didSet {
            super.value = value
            print("Child didSet")
        }
    }
}

let instance = Child()
instance.value = 10  // "Parent didSet" 출력 후 "Child didSet" 출력

 

이와 같이 Swift에서 상속과 관련된 여러 개념과 해결 방법을 이해하면, 코드의 재사용성과 유연성을 높일 수 있습니다.

 
반응형

'Apple > Apple_Swift' 카테고리의 다른 글

inout이란?  (0) 2024.08.09
KeyPath란?  (0) 2024.08.08
Swift에서의 Protocol, some, any 키워드: 자동차 예제로 쉽게 이해하기  (0) 2024.07.29
indirect 키워드  (0) 2024.07.28
@resultBuilder  (0) 2024.06.26