본문 바로가기
iOS/iOS

오버로딩 VS 오버라이딩

by 황민우 2022. 3. 8.

오버로딩 [ Overloading ]

- 같은 이름의 메서드에 매개변수는 다르게 선언할 수 있는 것을 의미합니다.

- 함수, 메서드의 이름은 같으나 매개변수, 리턴 타입, 등을 다르게 하여 함수, 메서드를 중복으로 선언할 수 있습니다.

- 함수, 서브스크립트, 생성자에서 사용할 수 있습니다.


예제

다음과 같이 같은 이름의 함수를 생성한 뒤 실행하면 똑같은 함수가 이미 정의되어 있다는 오류가 발생합니다.

func sum() { }
func sum() { }

하지만 아래와 같이 함수의 이름이 같아도 파라미터, 리턴 타입이 다르다면 오류 없이 실행이 됩니다.

func sum() { }
func sum(n: Int) { }
func sum() -> Int {
    return 0
}

Swift에서 오버로딩을 이용하면, 함수의 이름이 겹친다한들 각각의 파라미터의 타입이 다르기 때문에 서로 다른 함수로 식별되어 함수를 선언하여 사용할 수 있습니다.

또한, 함수를 호출하여도 오버로딩된 함수의 모든 조건에 일치하는 함수를 찾아서 호출시켜주기 때문에 문제없이 원하는 함수를 사용할 수 있습니다.


오버라이딩 [ Overriding ]

- 상위 클래스에서 선언한 메서드를 하위 클래스에서 재정의해서 사용하는 것입니다.


예제

Hero 클래스와 Hero 클래스를 상속받는 DC 클래스를 생성했습니다.

class Hero {
    func description(){
        print("나는 히어로입니다.")
    }
}

class DC: Hero{
    
}

 

그리고 Batman이라는 프로퍼티를 만들어서 DC 클래스 인스턴스로 Hero클래스의 접근할 수 있습니다.

이는 DC클래스가 Hero클래스를 상속 받았기 때문이며, 상속으로 인해 수퍼클래스의 멤버들에 모두 접근이 가능합니다.

class Hero {
    func description(){
        print("나는 히어로입니다.")
    }
}

class DC: Hero{
    
}

let Batman: DC = .init()
Batman.description()

실행결과
// 나는 히어로입니다.

 

이때, 수퍼클래스의 메서드를 그대로 받아 사용하지 않고 서브클래스에서 오버 라이딩을 할 수 있습니다.

override라는 키워드를 붙이고 메서드를 재정의해주면 프로퍼티를 통해 실행했을 때, 재정의된 메서드로 출력됩니다.

class Hero {
    func description(){
        print("나는 히어로입니다.")
    }
}

class DC: Hero{
    override func description(){
        print("나는 DC 히어로입니다.")
    }
}

let Batman: DC = .init()
Batman.description()

실행결과
// 나는 DC 히어로입니다.

 


내용 출처

https://babbab2.tistory.com/129

 

Swift) 오버로딩(Overloading) vs 오버라이딩(Overriding)

안녕하세요 :)))) 소들입니다 오늘은 음... 가볍게?? 가끔 헷갈리기 쉬운 용어인 오버로딩(Overloading) 오버라이딩(Overriding) 에 대해 정리해보고 가려고 해요!!! 용어가 비슷하다고 해서 개념도 비슷

babbab2.tistory.com

 

댓글