본문 바로가기

JAVA

[JAVA] 메소드 오버로딩 (Method Overloading) (자바 독학하기12)

반응형

한 클래스 내에 동일한 이름의 메소드를 둘 이상 정의하는 것은 허용되지 않는다.

그러나 매개변수의 선언이 다르면 가능하다.

이것을 메소드 오버로딩이라 한다.

 

호출할 메소드를 찾을 때 메소드의 이름과 매개변수 정보를 이용한다.

예를 들어 void A (int a) 라는 메소드가 있다면 이 메소드를 호출할 때

A(1); 과 같이 호출 할 수 있다.

그런데 이때 메소드의 이름이 같아도 매개변수의 정의가 다르면 동일한 이름의 메소드를 허용한다.

이를 메소드 오버로딩이라 한다.

 

void A (int a)

void A (int a, int b)

는 매개변수의 개수가 달라 허용된다.

 

void A (int a)

void A (double c)

는 매개변수의 형이 다르기 때문에 허용된다.

 

이런 식의 사용인데 만약에 void A (int a) 와 void A (double c) 가 선언된 상황에서

A('a');

로 호출된다면 이는 문자 a 에 대한 인자를 전달받는 메소드가 없기때문에 a 는 자동 형변환이 이루어진다.

이러한 상황에서 자동 형 변환 규칙을 적용하되 가장 가까운 위치에 놓여있는 자료형으로의 형 변환을 우선 시도하기 때문에 void A (int a) 를 호출하게 된다.

이러한 상황을 피하기 위해 항상 동일한 형의 매게변수로 호출하도록 하여야 한다.

 

또한 생성자도 위와 같은 방식으로 오버로딩이 가능하다.

위 코드에서 생성자의 오버로딩을 구현하였는데 여기에 this 가 쓰였다.

여기서 사용된 this 는 '오버로딩 된 다른 생성자' 를 의미한다.

 

이 this 는 다른식으로 사용되기도 한다.

다음과 같이 인스턴스 변수 var 과 매개변수 var 가 같은 경우에 A 메소드에서 var 를 사용하면 매개변수로 선언한 var 를 인식하게 된다.

그런데 이때 this.var 로 써주게 되면 인스턴스 변수를 지칭할 수 있게 된다.

따라서 this.var = var 와 같이 인스턴스 변수 내에 매개변수를 넣는 방식도 가능하게 된다.

반응형