Overloading vs Overriding
Overloading vs Overriding
Kotlin: 오버로딩(Overloading) vs 오버라이딩(Overriding)
코틀린(Kotlin)에서 오버로딩(Overloading)과 오버라이딩(Overriding)은 모두 함수(메서드)와 관련된 개념이지만, 그 목적과 사용 방식에서 중요한 차이가 있습니다.
오버라이딩 (Overriding)
정의: 오버라이딩은 상속 관계에서 자식 클래스가 부모 클래스로부터 상속받은 정보(프로퍼티)나 행위(메서드)를 재설계(재정의)하는 것을 의미합니다. 주로 부모 클래스의 메서드를 재정의할 때 사용됩니다.
- 목적: 부모 클래스에 공통적인 내용을 관리하되, 자식 클래스마다 고유한 개성을 표현하고 싶을 때 사용됩니다.
- 예:
Bird
클래스에fly()
라는 공통 메서드가 있지만,Chicken
,Sparrow
,Pigeon
과 같은 자식 클래스는 각자의 방식으로fly()
동작을 다르게 정의할 수 있습니다.
- 예:
- Kotlin에서의 구현:
- 부모 클래스의 메서드를 오버라이딩하려면 해당 메서드 앞에
open
키워드를 붙여 상속 가능한 상태로 만들어야 합니다. - 자식 클래스에서 메서드를 재정의할 때는
override
키워드를 사용합니다.
- 부모 클래스의 메서드를 오버라이딩하려면 해당 메서드 앞에
- 예시:
Bird
클래스에fly()
메서드가 있고,Chicken
,Sparrow
,Pigeon
클래스가Bird
를 상속받습니다.- 각 자식 클래스는
override fun fly()
를 사용하여 자신만의 비행 동작을 정의할 수 있습니다.Chicken
은 “나이살의 이름가 날아봅니다~ 꼬끼오!”라고 출력Sparrow
는 “색상의 이름이 날아봅니다~ 짹짹!”이라고 출력
오버로딩 (Overloading)
정의: 오버로딩은 동일한 이름의 메서드를 여러 개 만드는 것을 의미합니다. 이때, 각 메서드는 매개변수의 개수가 다르거나, 매개변수의 자료형이 달라야 합니다.
- 목적: 같은 기능을 수행하지만 처리해야 할 데이터의 형태나 개수가 다를 때, 메서드의 이름을 통일하여 코드의 가독성을 높이고 관리의 편의성을 제공하기 위함입니다.
- 예: 정수를 더하는
addInt
, 실수를 더하는addDouble
로 따로 만드는 대신,add
라는 하나의 이름으로 오버로딩하여 사용할 수 있습니다.
- 예: 정수를 더하는
참고: 반환 자료형(반환형)은 오버로딩에 영향을 주지 않습니다.
- 예시:
Calculator
클래스 안에 두 숫자를 더하는add
메서드가 있다고 가정합니다.- 정수 덧셈:
add(num1: Int, num2: Int): Int
- 실수 덧셈:
add(num1: Double, num2: Double): Double
오버로딩과 오버라이딩의 주요 차이점
- 관계:
- 오버라이딩: 상속 관계에서 발생하며, 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것입니다.
- 오버로딩: 상속과 관계없이 같은 클래스 내에서 매개변수를 다르게 하여 동일한 이름의 메서드를 여러 개 정의하는 것입니다.
- 시그니처 변경:
- 오버라이딩: 부모 메서드와 동일한 메서드 시그니처(이름, 매개변수 타입 및 개수)를 가집니다. (구현 내용만 변경)
- 오버로딩: 메서드 이름은 같지만 매개변수의 개수나 타입이 달라야 합니다.
This post is licensed under CC BY 4.0 by the author.