Hello

Java 오버로딩(overloading), 성립조건, 장점, 단점

by 볼빵빵오춘기

오버로딩(overloading)

한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것

void println();
void println(boolean x);
void println(char x);
void println(char x);
void println(char[] x);
void println(double x);
void println(float x);
....

 

오버로딩이 성립하기 위한 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 타입은 영향없다.

예제1

예제코드1

int add(int a, int b){return a+b;}
int add(int x, int y){return x+y;}

⇒ 조건 1번만 일치

 메서드 중복정의

 이럴땐 이미 메서드가 존재한다고 컴파일러가 error메세지 출력한다.

 

예제코드2

int add(int a, int b){return a+b;}
long add(int x, int y){return (long)x+y;}

⇒ 조건 1번 일치

 매개변수 타입과 갯수가 일치해서 조건2번 

 반환타입도 달라 조건3번 x

⇒ 중복정의

 

예제코드3

long add(int a, long b){return a+b;} // 1
long add(long x, int y){return (long)x+y;} // 2

⇒ 조건 1,2,3 ok . 오버로딩 성립

⇒ 만약 예제코드3을 사용하고자 add(3,3)을 쓸 경우 1번라인과 2번라인 둘 다 가능하다 그러므로 컴파일러는 ambigous error를 나타낸다.

 

예제2

public class Hello2 {

	public static void main(String[] args) {
		MyMath3 mm = new MyMath3();
		
		System.out.println("mm.add(3,3) 결과 : " +mm.add(3,3));
		System.out.println("mm.add(3L,3) 결과 : " +mm.add(3L,3));
		System.out.println("mm.add(3,3L) 결과 : " +mm.add(3,3L));
		System.out.println("mm.add(3L,3L) 결과 : " +mm.add(3L,3L));
		
		int[] a = {100,200,300};
		System.out.println("mm.add(a) 결과 : " +mm.add(a));
		
	}

}
class MyMath3{
	
	long add(int a, long b){
		System.out.print("long add(int a, long b) - ");
		return a+b;
	} 
	
	long add(long x, int y){
		System.out.print("long add(long a, int b) - ");
		return (long)x+y;
	} 
	
	int add(int a,int b) {
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	
	long add(long a,long b) {
		System.out.print("long add(long a, long b) - ");
		return a+b;
	}
	
	int add(int[] a) {
		System.out.print("int add(int[] a) - ");
		int result = 0;
		for(int i =0; i< a.length;i++) {
			result += a[i];
		}
		return result;
	}
	
	
}

 

 

오버로딩의 장점

  • 다형성을 구현할 수 있다.
  • 코드의 가독성이 좋아진다.
  • 메서드의 이름을 절약할 수 있다.
  • 기능 예측이 쉬워진다.

 

오버로딩의 단점

비슷한 기능이 아닌 메서드를 동일한 이름으로 사용하여 공동으로 개발할 경우,

다른 개발자에게 오히려 혼동을 줄 수 있다.

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기