우리는 클래스를 정의하고 그 안에 메소드를 정의 할 수 있습니다.

그런데 우리가 한 클래스안에 두 개의 메소드를 정의 하고싶은데

두 메소드의 이름이 같으면 될까요?


원칙적으로는 한 클래스내에서 같은 이름을 가지는 메소드가 있어서는 안되겠죠?


하지만 자바에서는 메소드의 이름이 같은 메소드를 사용 할 수 있다는 점!!!


다만, 조건이 있습니다.


한 클래스 내에서 오버로딩을 사용하기 위해서는 몇가지 조건이 있습니다.


1. 메소드의 이름은 같아야 합니다.

2. 메소드의 매개변수의 개수 또는 매개변수의 타입이 달라야 합니다.

3. 리턴타입이 다르다고 해서 오버로딩은 성립하지 않습니다.


이 위의 3가지 조건만 지킨다면 오버로딩을 사용 할 수 있습니다.


아, 참고로 우리는 예제를 몇 가지 예제를 보면서 오버로딩을 계속 사용했습니다. ㅎㅎ


바로 println() 입니다.

println메소드안에 문자열도 쓰고, 정수도 쓰고, 실수도 쓰고 그냥 우리가 원하는 값만 넣어주면 화면에 다 보여주었죠?


사실 println메소드를 호출 할 때 매개변수의 타입에 따라 println의 메소드가 달라지는 겁니다.

실제 println메소드가 정의 되어있는 PrintStream클래스를 들여다 보면


voidprintln()
Terminates the current line by writing the line separator string.
voidprintln(boolean x)
Prints a boolean and then terminate the line.
voidprintln(char x)
Prints a character and then terminate the line.
voidprintln(char[] x)
Prints an array of characters and then terminate the line.
voidprintln(double x)
Prints a double and then terminate the line.
voidprintln(float x)
Prints a float and then terminate the line.
voidprintln(int x)
Prints an integer and then terminate the line.
voidprintln(long x)
Prints a long and then terminate the line.
voidprintln(Object x)
Prints an Object and then terminate the line.
voidprintln(String x)

요렇게 오버로딩된 println()의 메소드를 정의해 놓고 있습니다.


그럼 실제로 오버로딩을 사용해보도록 해봅시다.



간단하게 sum메소드를 오버로딩 해보았습니다.

add.sum(3,5)를 호출해서 출력한 것과

add.sum(3.5d, 6.5d)를 호출해서 출력했을 때의 어떠한 메소드를 사용했는지 알아보려고 했습니다


실행결과



이렇게 오버로딩을 사용하면 메소드의 이름을 짓는데 고민을 덜 수 있고, 같은 기능을 가지는 메소드임을 예측 할 수 있습니다.