본문 바로가기

프로그래밍/Java

19.12.22) Java - 메서드 오버로딩(Method Overloading)

목차

  • 메서드 오버로딩(Method Overloading)이란?
  • 이름이 같으면 어떤 함수인지 찾는데 속도가 느리지 않을까?

    핵심

  • 메서드 오버로딩은 메서드의 이름이 같지만 매개변수의 타입과 개수를 다르게 하는 기능이다.

메서드 오버로딩(Method Overloading)이란?

메서드 오버로딩은 메서드의 이름이 같지만 매개변수의 타입과 개수를 다르게 하는 기능이다. 매개변수의 타입과 개수를 Signature라고 한다. 즉, 이름이 같더라도 매개변수의 Signature가 다르다면 에러가 발생하지 않는다. 그럼 왜 사용할까?

당연히 편리하기 때문이다. 덧셈 기능을 하는 메서드가 있다. 그런데 매개변수의 타입과 개수가 다르다고 메서드의 이름을 다 다르게 하면 생산성이 떨어진다. 그래서 같은 이름을 쓰되, 매개변수의 개수와 타입을 다르게 하는 것이다.

이름이 같으면 어떤 함수인지 찾는데 속도가 느리지 않을까?

그럼 이와 같은 의문이 들 수 있다. 컴퓨터가 같은 이름의 메서드가 100개 있다면 현재 호출된 메서드가 무엇인지 100번을 찾아야 하는 것 아닐까? 아니다.단호 왜냐하면 객체의 메서드가 heap area(정확하게는 Method area의 non-static zone)에 저장될 때는 컴퓨터가 각 메서드의 이름을 매개변수의 타입과 개수에 맞춰서 변경한다. 그렇기에 소스 코드에서는 같은 메서드 이름이지만 컴파일러가 인식할 때는 각각 다른 이름이다. 이를 정적 바인딩이라고도 한다. 그래서 속도와는 상관이 없다.

정적 바인딩

컴파일할 때 호출되는 메서드를 정하는 바인딩, 소스 코드에선 이름이 같은 메서드가 자기 만의 주소가 정해져 있는 것.