오버로딩 [ 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
'iOS > iOS' 카테고리의 다른 글
CS 이론 : 절차형 프로그래밍 vs 선언형 프로그래밍 (0) | 2022.03.10 |
---|---|
동기/비동기, 직렬/동시 (0) | 2022.03.09 |
시뮬레이터로 할 수 없는 것 (시뮬레이터의 한계) (0) | 2022.03.07 |
코코아 프레임워크, 코코아 터치, 코코아 팟 (0) | 2022.03.04 |
Safe Area (0) | 2022.03.03 |
댓글