한 클래스 내에 동일한 이름의 메소드를 둘 이상 정의하는 것은 허용되지 않는다.
그러나 매개변수의 선언이 다르면 가능하다.
이것을 메소드 오버로딩이라 한다.
호출할 메소드를 찾을 때 메소드의 이름과 매개변수 정보를 이용한다.
예를 들어 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 와 같이 인스턴스 변수 내에 매개변수를 넣는 방식도 가능하게 된다.
'JAVA' 카테고리의 다른 글
[JAVA] 콘솔 입·출력 (자바 독학하기14) (0) | 2021.06.28 |
---|---|
[JAVA] string 클래스 (자바 독학하기13) (0) | 2021.06.26 |
[JAVA] 클래스 변수와 클래스 메소드(static) (자바 독학하기11) (0) | 2021.06.24 |
[JAVA] 접근 수준 지시자(Acess-level-Modifiers) (자바 독학하기10) (0) | 2021.06.22 |
[JAVA] 패키지 (Package) (자바 독학하기9) (0) | 2021.06.21 |