- 메서드 오버 로딩이란?
메서드의 이름을 같도록 하고, 매개 변수만을 다르게 하는 것을 '오버 로딩(overloading)'이라 한다.
중요한 것은 매개변수의 개수가 같아도 타입의 순서가 다르면 다른 메서드처럼 인식된다.
코드로 보자.
public class ReferenceOverloading {
public static void main(String[] args) {
// TODO Auto-generated method stub
ReferenceOverloading reference = new ReferenceOverloading();
reference.print(12);
reference.print("stringData");
reference.print(12, "data");
reference.print("data", 55);
System.out.println('c');
}
public void print(char ch) {
System.out.println(ch);
}
public void print(int data) {
}
public void print(String data) {
System.out.println(data);
}
public void print(int intData, String stringData) {
System.out.println(intData + stringData);
}
public void print(String stringData, int intData) {
System.out.println(stringData + intData);
}
}
ReferenceOverlading 클래스에 print라는 이름의 메서드가 5개나 정의되어 있다.
그러나 매개변수가 모두 다르다. 타입이 같은 경우엔 순서가 다르다.
이들 모두 이름이 같을지라도 다른 메서드로 인식된다.
- 그럼 굳이 왜 같은 이름으로 메서드를 여러 개 정의하는 것일까?
대표적으로 System.out.println()을 보자.
System.out.println(10) >> 10
System.out.println("this is string") >> this is string
println()에 어떤 타입의 기본 자료형을 매개변수로 넘겨주어도 오류 없이 출력된다.
자바는 데이터를 담을 변수의 타입을 반드시 선언해줘야 함에도
어떻게 편하게 출력 메서드를 사용할 수 있는 것일까?
System.out.println() 역시 내부 구조를 보면 오버 라이딩을 이용하고 있다.
매개변수로 넘어오는 변수의 타입, 개수, 순서로 메서드를 구별하는 것이다.
public void print(int data) { }
public void print(int data2) { }
이렇게 매개변수 타입, 개수는 같게 이름을 다르게 정의해보자.
"Duplicate method print(int) in type ReferenceOverloading"
위의 경고 메세지를 띄어준다. 매개변수의 이름이 아닌,
타입, 개수, 순서로 인식하고 있음을 알 수 있다.
System.outprintInt()
System.outprintString()
System.outprintLong()
기능은 같으나 자료형마다 메서드 이름이 다르면 개발자가 얼마나 귀찮겠는가?
이런 부분을 보완하고자 메서드 오버 로딩은
"같은 역할을 하는 메서드는 같은 메소드 이름을 가져야 한다"는 모토로 사용하는 것이라고 기억하면 된다." (출처 : 자바의 신 197p.)
참고 교재 : 자바의 신
주의 : 개인 공부 후 기록한 것이니 오류가 있을 수 있습니다.
'Programming > Java' 카테고리의 다른 글
[ Java ] - 접근 제어자 (0) | 2020.09.21 |
---|---|
[ Java ] - 단축키 모음. (0) | 2020.09.16 |
[java] - 기본 자료형의 default 값은? (0) | 2020.09.14 |
Java 기초 - 변수 (2) | 2020.09.11 |
자바 기초 - 클래스 (0) | 2020.09.10 |
댓글