오버로딩과 오버라이딩은 객체지향프로그래밍의 특징 중 다형성
에 포함되는 개념이다.
📌 오버로딩(Overloading)
오버로딩
은 같은 이름을 가진 메서드를 여러 개 두는 것을 말한다.
메서드의 타입, 매개변수의 타입, 매개변수의 개수 등으로 다양한 종류를 생성할 수 있고
컴파일 중에 발생하는 정적 다형성
이다.
// 오버로딩 예제(Kotlin)
class Person {
fun eat(a: String) {
println("I eat$a")
}
fun eat(a: String, b: String) {
println("I eat $a and $b")
}
}
오버로딩은 이처럼 같은 역할을 하는 함수를 하나의 이름으로 사용할 수 있다는 장점이 있다.
내가 음식 한개를 먹었던, 두개를 먹었던, 내가 먹은 음식을 전부 출력하고 싶을 때 나는 단순히 Person 클래스의 eat 함수를 호출하기만 하면 된다.
만약, 오버로딩을 사용하지 않는다면 eatOneFood(), eatTwoFood()와 같이 다른 이름의 메서드를 여러개 생성해야 할 것이다.
📌 오버라이딩(Overriding)
오버라이딩
은 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의
하는 것을 말한다.
예를 들면, 고양이(하위)와 강아지(하위)는 동물(상위)이라는 범주에 포함되고 따라서 소리내기라는 동물의 특성을 물려받는다.
하지만 고양이는 "야옹~"하고 소리를 내고 강아지는 "멍멍"하고 소리를 내는 것처럼 같은 특성이라도 다르게 표현되어야 하는 경우가 있다.
만약 동물 클래스에서 소리내기의 기본을 "멍멍"이라고 정의했다면, 이 클래스를 물려받은 고양이 클래스는 소리내기 방법을 "야옹~"으로 재정의해야 할 것이다.
이는 상위 개체의 속성보다 하위 개체의 속성을 더 우선시한다 해서 '~보다 더 우선시하다'라는 뜻을 가진 오버라이딩이라고 부른다.
오버라이딩은 런타임 중에 발생하는 동적 다형성
이다.
// 오버라이딩 예제(Kotlin)
open class Animal {
open fun bark() {
println("mumu!")
}
}
internal class Dog : Animal() {
override fun bark() {
println("wal wal!")
}
}
오버라이딩과 오버로딩이 헷갈린다면 오버라이딩의 정의만 제대로 알아두자.
오버라이딩의 핵심은 상위 클래스를 재정의
하는 것이다.
재정의
가 세 글자니까 로딩이 아니라 라이딩
이라고 외우편 좀 편하다ㅎㅎ
'CS > 개발상식' 카테고리의 다른 글
TDD(Test-Driven Development) (0) | 2022.09.15 |
---|---|
RESTful API (0) | 2022.09.09 |
객체 지향 프로그래밍의 설계원칙, SOLID (0) | 2022.09.07 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) (0) | 2022.09.05 |
좋은 코드란 무엇인가 (0) | 2022.08.31 |