[swift] 메서드 재정의와 확장의 차이점 이해하기

스위프트에서는 클래스, 구조체 및 열거형을 확장하여 새로운 기능을 추가할 수 있습니다. 또한, 기존의 기능을 수정하거나 변경할 수도 있습니다. 이때, 메서드 재정의와 확장은 주요한 역할을 하며, 두 가지가 어떻게 다른지 알아보겠습니다.

메서드 재정의

클래스의 서브클래스에서 상위 클래스에 이미 구현된 메서드를 다시 구현하는 것을 메서드 재정의라고 합니다. 즉, 상위 클래스에서 정의된 메서드의 내용을 변경하여 하위 클래스에 맞게 재정의합니다. 이는 런타임에 동적으로 실행됩니다. 아래는 메서드를 재정의하는 예시입니다.

class ParentClass {
    func greeting() {
        print("Hello, I am the parent")
    }
}

class ChildClass: ParentClass {
    override func greeting() {
        print("Hello, I am the child")
    }
}

let obj = ChildClass()
obj.greeting() // 출력: "Hello, I am the child"

확장

확장은 기존 클래스, 구조체, 열거형 또는 프로토콜의 기능을 추가합니다. 이는 원본 소스 코드를 수정하지 않고 새로운 기능을 추가하는 것을 의미합니다. 확장은 컴파일 타임에 정적으로 확인됩니다. 아래는 클래스를 확장하는 예시입니다.

class MyClass {
    var number: Int = 5
}

extension MyClass {
    func multiplyByTwo() {
        number *= 2
    }
}

let obj = MyClass()
obj.multiplyByTwo()
print(obj.number) // 출력: 10

결론

메서드 재정의는 상속 관계에서 사용되며, 클래스의 기능을 고칠 때 주로 사용됩니다. 반면에 확장은 기존의 타입에 기능을 추가할 때 사용되며, 원본 타입을 변경하지 않고 새로운 기능을 추가할 수 있습니다.

이 두 가지를 적절히 활용하여 코드를 유지보수하고 확장하는 것이 중요합니다.

참고 자료: 스위프트 공식 문서