[JAVA] 오버로딩

안요한·2022년 5월 19일
0

JAVA

목록 보기
4/16
post-custom-banner

4.1 오버로딩이란?

한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '오버로딩'이라고 한다.

4.2 오버로딩의 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.

!! 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다!!

4.3 오버로딩의 예

[보기 1]
int add(int a, int b) {return a+b;}
int add(int x, int y) {return x+y;}
//매개변수의 이름만 다를 뿐 타입이 같이 때문에 성립x
//사용되는 변수의 이름이 달라질 뿐, 아무런 의미 없음. 그냥 같은 메서드임

[보기2]
int add(int a, int b) {return a+b;}
long add(int a, int b) {return (long)(a+b);}
//리턴타입만 다른 경우. 매개변수의 타입과 개수가 일치하기 때문에 
//어떤 메서드가 호출될지 모름. 오버로딩x

[보기3]
long add(int a, long b) {return a+b;}
long add(long a, int b) {return a+b;}
//매개변수 값에 의해 호출될 메서드가 구분될 수 있으므로 오버로딩 o
// but, 순서만 바꿔놓은 것은 단점이 될 수 있기에 주의해야함.

[보기4]
int add(int a, int b) {return a+b;}
int add(long a, long b) {return a+b;}
long add(int[] a) { //배열의 모든 요소의 합을 반환한다.
	long result = 0;
	
	for(int i=0; i<a.length; i++){
		result += a[i];
	}
	return result;
}
//모두 올바르게 오버로딩 되어 있다.
//같은 일을 하지만 매개변수를 달리해야하는 경우에, 
//이와 같이 이름은 같고 매개변수를 다르게 하여 오버로딩을 구현 한다.

4.4 오버로딩의 장점

  • 하나의 이름으로 정의 된다면, 기억하기도 쉽고 이름 짧게 할 수 있어서 오류의 가능성을 많이 줄일 수 있다.
  • 이름만 보고도 이름이 같으니 같은 기능을 하겠구나 라고 예측할 수 있다.
  • 메서드의 이름을 절약할 수 있다.

4.5 가변인자와 오버로딩

가변인자는 '타입... 변수명'과 같은 형식으로 선언하며, PrintStream클래스의 printf()가 대표적인 예.

가변인자는 매개변수 중에서 가장 마지막에 선언해야한다. 구별할 방법이 없기 때문이다.

//만일 여러 문자열을 하나로 결합하여 반환하는 concatenate메서드를 작성한다면
//아래와 같이 매개변수의 개수를 다르게 해서 여러 개의 메서드를 작성해야할 것이다.
String concatenate(String s1, String s2) {...}
String concatenate(String s1, String s2, String s3) {...}
String concatenate(String s1, String s2, String s3, String s4) {...}

//이럴 때 가변인자를 사용하면
String concatenate(String... str){...}

//이 메서드를 호출할 때는 인자의 개수를 가변적으로 할 수 있다.
System.out.println(concatenate());         //인자가 없어도 되고
System.out.println(concatenate("a"));      //인자 하나
System.out.println(concatenate("a","b"));  //인자 둘
System.out.println(concatenate(new String[]{"A","B"));  //배열도 쌉가능!

//가변인자는 내부적으로 배열을 이용.
//메서드를 호출할 때마다 배열이 새로 생성. 편하지만 이런 비효율이 있음.
//매개변수의 타입을 배열로 할수도 있지만, 인자를 무적권 지정해 줘야하기 때문에, 인자 생략 불가.
//구별되지 못하는 경우가 잦기 때문에 ,가능한 가변인자를 사용한 오버로딩은 하지 않는 것이 좋다.
profile
걍이렇게돼브렀다리
post-custom-banner

0개의 댓글