JAVA의 오버로딩(Overload)

Polynomeer·2020년 3월 22일
0

JAVA

목록 보기
1/8
post-thumbnail

JAVA에서의 메소드 오버로딩(Overload)

자바와 같이 클래스를 구현하는 언어에서는 한 클래스 내에서 같은 이름의 메소드 정의를 피하기 어려운 경우가 있다. 가령, 덧셈을 하기 위한 메소드를 구현한다고 생각해보면, add(int n1, int n2)처럼 매개변수 2개를 갖는 메소드와 add(int n1, int n2, int n3)와 같이 매개변수를 3개까지 가지는 메소드를 동시에 구현해야 할 수 있다. 그렇다면 완전히 동일한 기능을 하는데도 불구하고 메소드 이름을 일일이 달리하는 것은 매우 불편한 일이 될 것이다. 자바에서는 이러한 불편함을 없애기 위해서 메소드 오버로딩(Overload)을 지원한다.

메소드 오버로딩의 조건

자바에서는 기본적으로 클래스 내에서 동일한 이름의 메소드가 정의되지 않는다. 하지만 일부경우에 대해서는 예외로 허용된다.

  • 매개변수의 개수가 다른 경우
  • 매개변수의 자료형(data type)이 다른 경우

매개변수의 개수가 다른 경우

class SampleClass {
	void myFunc(int n){...}
    void myFunc(int n1, int n2){...}
    void myFunc(int n1, int n2, int n3){...}
}

이와 같은 경우 하나의 클래스 안에 이름이 같지만 매개변수의 개수가 서로 다른 메소드가 여러개 정의 되어있다. 이때 자바는 이를 매개변수의 개수를 기준으로 서로 다른 메소드로 인식하여 구분할 수 있게된다. 그리고 각각에 해당하는 메소드를 호출한다.

SampleClass inst = new SampleClass(); 
inst.myFunc(10);		// call myFunc(n)
inst.myFunc(10, 20);		// call myFunc(int n1, int n2)
inst.myFunc(10, 20, 30);	// call myFunc(int n1, int n2, int n3)

SampleClass타입의 인스턴스인 sampleInst를 생성하고 각 메소드를 인자 개수만 바꾸어서 전달하면 각각 매개변수의 개수가 일치하는 메소드를 호출하게 된다.

매개변수의 자료형(data type)이 다른 경우

class SampleClass {
    void myFunc(int n1, int n2){...}
    void myFunc(int n1, double n2){...}
}
SampleClass inst = new SampleClass();
inst.myFunc(10, 'a'); // myFunc(int n1, int n2) or myFunc(int n1, double n2) 

'a'는 char형인데 char형 변수를 두번째 매개변수로 갖는 메소드는 정의되어 있지않다. 이것은 컴퓨터가 논리적으로 판단하여 처리할 수 없는 형태인 것 같이 보인다. 하지만 이러한 애매함을 자바에서는 자동형변환 규칙으로 미리 정의해놓았다. 우선 이 규칙을 적용하되, 가장 가까운 위치에 놓여있는 자료형으로 변환이 이루어진다. 즉, char형은 double형 보다는 int형에 가까운 위치에 놓여있으므로 int형으로 형변환되어 myFunc(int n1, int n2)가 호출된다.

메소드 오버로딩(Overload)은 클래스 내에서 동일한 이름의 메소드를 예외적으로 허용하는 것인데, 매개변수의 개수나 자료형이 다를때만 허용된다.

profile
어려운 문제를 어렵지 않게.

0개의 댓글