📚 참고
자바의 정석 기초편 (객체지향개념만)

 

 

 

 

 

 

 

 

 

오버로딩

 

 

  • 한 클래스 안같은 이름의 메서드 여러 개 정의하는 것 (함수 과적)
  • 기본적으로 메서드명 : 메서드 = 1 : 1
  • 오버로딩을 통해 메서드명 : 메서드 = 1 : N

 

 

 

 

예제

 

void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(int x)

 

 

 

 

 

 

 

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

 

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

 

 

 

 

예제

 

// 1. 오버로딩 X (매개변수 개수, 타입이 모두 같음) => 메서드 중복정의
int add(int a, int b) { return a + b; }
int add(int x, int y) { return x + y; }

// 2. 오버로딩 X (반환 타입은 영향 없음) => 메서드 중복정의
int add(int a, int b) { return a + b; }
long add(int a, int b) { return a + b; }

// 3. 오버로딩 O (매개변수 타입이 다름)
long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }

 

  • 예제3에서 add(3, 3); 을 호출한다면?
  • 둘 다 실행될 수 있기 때문에 ambiguous error가 출력된다.

 

 

 

 

올바른 예

 

class MyMath3 {
    int add(int a, int b) {
        return a+b;
    }
    
    long add(int a, long b) {
    	return a+b;
    }

    int add(int[] a) {
    	int result = 0;
        for(int i=0; i < a.length;i++)
        	result += a[i];
            
        return result;
    }
}

 

  • 매개변수는 다르지만 같은 의미의 기능을 수행
  • 메서드 이름이 같다 = 하는 작업이 같다