Java/객체지향

[객체지향][자바의 정석] - 3. 메서드 오버로딩

얄루몬 2021. 10. 17. 15:43

6.3 메서드 오버로딩

 

 

3.1 메서드 오버로딩(method overloading)이란?

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

 

 

3.2 오버로딩의 조건

- 메서드의 이름이 같아야 한다.

- 매개변수의 개수 또는 타입이 달라야 한다. (개수가 다르든지 타입이 다르든지)

- 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립하지 않음. (즉, 리턴타입은 오버로딩 구현에 아무런 영향을 주지 못한다는 의미이다.)

 

 

void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(object x)
void println(String x)

오버로딩이 아닌 경우

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

// 메서드 중복정의
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }

// 반환 타입은 영향이 없기 때문에 이것도 중복정의 오버로딩이다.

 

오버로딩인 경우 

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

#개수는 같지만 타입이 다름

#add(3,3)를 쓸 경우 컴퓨터는 어떤 것을 써야할지 모른다. (둘 다 가능하기 때문) --> ambiguous

 

오버로딩인 경우 (2)

class MyMath3 {
    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("int add(long a, long b) - ");
        return a+b
    
    }
    
    int add(int[] a){
    	System.out.print("int add(int[] a) - ")
        int resul = 0;
        for(int i=0;i<a.length;i++)
        	result += a[i];
 		return result;   
    }

}

#메서드는 동작을 표현하는 것이기 때문에 대부분 동사로 표현하는 것.

# 이름이 같다는 것은 하는 작업이 같다는 뜻.