Swift 상속: 상세 설명 및 예시
상속의 기본 개념
상속이란, 기존 클래스(부모 클래스, 슈퍼 클래스)의 특징(프로퍼티, 메서드 등)을 그대로 이어받아 새로운 클래스(자식 클래스, 서브 클래스)를 만드는 것을 의미합니다. 이를 통해 코드 재사용성을 높이고, 프로그램의 구조를 명확하게 만들 수 있습니다.
예시:
class Animal {
var name: String
init(name: String) {
self.name = name
}
func speak() {
print("소리를 냅니다.")
}
}
class Dog: Animal {
func bark() {
print("멍멍!")
}
}
let myDog = Dog(name: "뽀삐")
myDog.speak() // "소리를 냅니다." 출력
myDog.bark() // "멍멍!" 출력
위 예시에서 Dog 클래스는 Animal 클래스를 상속받았으므로, Animal 클래스의 name 프로퍼티와 speak() 메서드를 사용할 수 있습니다. 또한, Dog 클래스만의 고유한 기능인 bark() 메서드를 추가했습니다.
오버라이딩 (Overriding)
상속받은 메서드나 프로퍼티를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 합니다. 부모 클래스의 기능을 변경하거나 추가적인 기능을 구현할 때 사용합니다.
예시:
class Cat: Animal {
override func speak() {
print("야옹!")
}
}
let myCat = Cat(name: "나비")
myCat.speak() // "야옹!" 출력
위 예시에서 Cat 클래스는 Animal 클래스의 speak() 메서드를 오버라이딩하여 고양이가 내는 소리인 "야옹!"을 출력하도록 변경했습니다.
오버로딩 (Overloading)
같은 이름의 메서드를 여러 개 정의하는 것을 오버로딩이라고 합니다. 매개변수의 타입이나 개수가 다르면 같은 이름의 메서드를 여러 개 정의할 수 있습니다. 컴파일러는 호출 시 전달되는 인자의 타입과 개수를 보고 적절한 메서드를 선택합니다.
예시:
class Calculator {
func add(a: Int, b: Int) -> Int {
return a + b
}
func add(a: Double, b: Double) -> Double {
return a + b
}
}
let calculator = Calculator()
let intResult = calculator.add(a: 3, b: 5) // Int 타입의 add 메서드 호출
let doubleResult = calculator.add(a: 3.14, b: 2.71) // Double 타입의 add 메서드 호출
위 예시에서 add 메서드는 매개변수의 타입에 따라 다른 기능을 수행합니다.
상속의 장단점
- 장점:
- 코드 재사용성: 부모 클래스의 코드를 자식 클래스에서 재사용하여 개발 시간을 단축할 수 있습니다.
- 코드 유지보수: 코드의 구조를 명확하게 하고, 변경이 필요한 부분을 한 곳에서 수정할 수 있어 유지보수가 용이합니다.
- 다형성: 다양한 객체를 동일한 인터페이스로 다룰 수 있어 유연한 프로그래밍이 가능합니다.
- 단점:
- 강한 결합: 부모 클래스에 변경이 생기면 자식 클래스에도 영향을 미칠 수 있습니다.
- 복잡성: 상속 관계가 복잡해지면 코드를 이해하기 어려워질 수 있습니다.
주의할 점
- 상속은 클래스에서만 가능합니다. 구조체와 열거형은 상속을 지원하지 않습니다.
- final 키워드: 클래스, 메서드, 프로퍼티 앞에 final 키워드를 붙이면 상속이나 오버라이딩을 금지할 수 있습니다.
- super 키워드: 부모 클래스의 메서드를 호출할 때 super 키워드를 사용합니다.
결론
Swift의 상속은 코드 재사용성을 높이고, 프로그램의 구조를 명확하게 만들어주는 중요한 개념입니다. 오버라이딩과 오버로딩을 적절히 활용하여 유연하고 확장 가능한 코드를 작성할 수 있습니다. 하지만 상속의 단점도 고려하여 신중하게 사용해야 합니다
'IOS개발: SWIFT > 4. 객체 지향 프로그래밍 심화' 카테고리의 다른 글
Swift 확장: 타입 확장, 프로토콜 확장 (0) | 2024.09.13 |
---|---|
Swift 프로토콜 정의와 채택: 프로토콜 상속, 프로토콜 연장 (0) | 2024.09.13 |
Swift 초기화: 초기화 위임, 실패 가능한 초기화 (0) | 2024.09.12 |
Swift 메서드: 인스턴스 메서드, 타입 메서드 (0) | 2024.09.12 |
Swift 프로퍼티: 저장 프로퍼티, 계산 프로퍼티, 지연 저장 프로퍼티 (0) | 2024.09.12 |