[swift] 익스텐션과 상속의 장단점 비교
개요
익스텐션과 상속은 Swift에서 코드를 확장하고 재사용하는 데 사용되는 두 가지 주요 기술이다. 각각의 장단점을 비교하여 어떤 상황에 어떤 기술을 사용해야 하는지 알아보자.
익스텐션 (Extensions)
익스텐션은 기존의 클래스, 구조체, 열거형 또는 프로토콜에 새로운 기능을 추가하는 방법을 제공한다.
장점:
- 기존 코드에 손상을 주지 않으면서 새로운 기능을 추가할 수 있다.
- 타사 라이브러리나 프레임워크를 포함하여 코드를 확장할 수 있다.
- 익스텐션을 이용하여 프로토콜의 프토퍼티나 메소드를 구현할 수 있다.
단점:
- 기존 타입의 내부 속성에는 접근할 수 없다.
- 저장 프로퍼티를 추가할 수 없다.
// 익스텐션을 사용하여 Double 타입에 round 메소드를 추가하는 예제
extension Double {
func round(to places: Int) -> Double {
let precision = pow(10, Double(places))
return (self * precision).rounded() / precision
}
}
상속 (Inheritance)
상속은 부모 클래스의 특성을 자식 클래스가 물려받아 사용할 수 있도록 하는 기술이다.
장점:
- 부모 클래스의 기능을 그대로 물려받아 재사용할 수 있다.
- 서브클래싱을 통해 다양한 타입을 만들 수 있다.
단점:
- 다중 상속이 불가능하다.
- 클래스 간의 강한 결합이 발생할 수 있다.
// 상속을 통해 도형을 나타내는 Shape 클래스를 기반으로 Circle 클래스 생성하는 예제
class Shape {
var name: String
init(name: String) {
self.name = name
}
}
class Circle: Shape {
var radius: Double
init(name: String, radius: Double) {
self.radius = radius
super.init(name: name)
}
}
익스텐션 vs. 상속
- 익스텐션을 사용하는 경우: 기존 타입에 새로운 기능을 추가하거나 프로토콜을 준수하는 기능을 구현할 때
- 상속을 사용하는 경우: 부모 클래스의 기능을 그대로 활용하면서 새로운 타입을 만들 때
결론
익스텐션과 상속은 각자의 장단점을 가지고 있으며, 상황에 따라 적절히 선택하여 사용해야 한다. 코드를 재사용하고 확장하는데 유연하고 효율적으로 사용하기 위해 익스텐션과 상속을 적절히 활용하는 것이 중요하다.