TIL | JAVA 오버로딩(overloading)

김윤희·2022년 8월 1일
0

오버로딩(overloading)

오버로딩이란?


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

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)
  • ✔ 위의 코드처럼 대표적으로 println()은 어떤 매개변수가 들어왔는지 보고 어떤 메서드를 사용할지 고른다
    (자바에서 로버로딩을 지원하기 때문에 메서드 한 개로 여러가지 경우의 일을 할 수 있다 만약 오버로딩을 지원하지 않는다면 상황에 따라 쓰는 메서드의 이름들이 다 달라져야할 것 이다)


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


  1. 메서드 이름이 같아야한다
  2. 매개변수의 개수 또는 타입이 달라야 한다
  3. 반환 타입은 영향없다
//에러! 메서드 중복정의 (1번만 충족하기 때문에 오버로딩이 아니다)
int add(int a, int b){ return a+b;}
int add(int x, int y){ return x+y;}

//에러! 메서드 중복정의 (2번을 충족하지 않는다 / 반환 타입은 영향 없다)
int add(int a, int b){ return a+b;}
long add(int a, int b){ return (long)a+b;}

//오버로딩 충족한다
// 하지만 add(3, 3)을 호출한다면 
//컴퓨터가 둘 중 어느걸 사용하려고 했는지 알 수 없어서 에러!!  - 모호하다고 뜬다
//(메서드 두개가 ambiguous 하다고 뜬다)
long add(int a, long b){ return (long)a+b;}
long add(long a, int b){ return (long)a+b;}

📌오버로딩의 올바른 예 - 매개변수는 다르지만 같은 의미의 기능 수행 (하는 작업이 같다)

class MyClass{
	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 result = 0;
        for(int i=0; i< a.length; i++){
        	result +=a[i]
        }
    	return result;
    }
    
}

✔ 자바는 메서드 오버로딩밖에 없지만, c++에 연산자 오버로딩도 있다. 자바에도 연산자 오버로딩을 +로 예를들어보면 세가지 기능을 한다
1. 부호
2. 덧셈
3. 문자열 결합

0개의 댓글