본문 바로가기
Programming/Java

[Java] - overloading, 메서드 오버로딩

by 구튼탁 2020. 9. 14.
728x90
  • 메서드 오버 로딩이란?

메서드의 이름을 같도록 하고, 매개 변수만을 다르게 하는 것을 '오버 로딩(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.)

 

 

참고 교재 : 자바의 신

주의 : 개인 공부 후 기록한 것이니 오류가 있을 수 있습니다.

728x90

'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

댓글