[기술 면접 질문] 오버로딩 & 오버라이딩

0

기술 면접 준비

목록 보기
16/19
post-thumbnail

[기술 면접 질문] 오버로딩 & 오버라이딩

함수 오버로딩(overloading)이란?

  • 함수 중복 정의
    = 함수 이름은 동일하지만 매개변수 개수/타입이 다른 함수를 만드는 것
  • 장점:
    사용자 편의성 & 코드 가독성 향상
  • 단점:
    너무 많은 함수 오버로딩 -> 어떤 오버로드 함수가 호출되었는지 알기 힘들어짐 -> 코드 해석 어려움
  • 함수 오버로딩 규칙
    • 함수 이름 동일해야
    • 매개변수 타입 또는 개수 달라야
    • 매개변수 이름은 오버로딩에 영향 X
    • 함수의 반환 타입은 오버로딩에 영향 X
      (다만, 매개변수 타입과 개수가 동일하고 반환 타입만 다른 함수를 정의해선 X
      -> 컴파일러가 어떤 함수를 호출해야 하는지 알 수 없음)
// 함수 오버로딩을 사용하지 않은 경우
// 같은 동작을 하는 함수이지만, 매개변수의 타입/개수에 따라 다른 이름을 가진다.
fun calcInt(a:Int, b:Int):Int
fun calcDouble(a:Double, b:Double):Double
fun calcFloat(a:Float, b:Float): Float
fun calcThreeInt(a:Int, b:Int, c:Int)
// 함수 오버로딩을 사용하는 경우
// 같은 동작을 하는 함수가 같은 이름을 가진다.
fun calc(a:Int, b:Int):Int
// fun calc(a:Int, b:Int):IDouble 반환 타입만 다른 함수 오버로딩 X
fun calc(a:Double, b:Double):Double
fun calc(a:Float, b:Float): Float
fun calc(a:Int, b:Int, c:Int):Int

함수 오버라이딩(overriding)이란?

  • 함수 재정의
  • 상속에서 쓰이는 개념으로, 부모 클래스의 함수를 자식 클래스에서 재정의하여 사용하는 것
    • 자식 클래스의 함수에서 부모 클래스의 함수와 다른 동작을 수행하고 싶은 경우 사용
    • 부모 클래스 타입의 참조 변수에서 함수를 호출했을 때, 자식 클래스에서 오버라이딩한 함수가 호출됨
// 부모 클래스
open class Guitar(){ 
    open fun play() = println("나는 기타다.")
}

// 자식 클래스
class ElectricGuitar():Guitar(){ 
    // 부모 클래스의 함수 play()를 오버라이딩
    override fun play() = println("나는 일렉 기타다~")
}

fun main() {
  // 자식 클래스 인스턴스를 담은 부모 클래스 타입의 변수
  val guitar: Guitar = ElectricGuitar()
  
  // play() 함수 호출 시 
  // 부모 클래스의 play()가 아닌 오버라이딩한 자식 클래스의 play() 호출됨
  guitar.play() // 출력 값: 나는 일렉 기타다~
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글