|
오버로딩(overloading) 또는 메소드 오버로딩(method overloading)이라고 한다. 한 클래스 내에 같은 이름의 메소드를 여러 개 정의한다는 의미 |
보통 하나의 메소드 이름에 하나의 기능만을 구현하는게 일반적이지만,
하나의 메소드 이름으로 여러 기능을 구현하는게 편한 경우가 있다.
우리가 대표적으로 사용하는 println메소드를 살펴보자
|
예시 void println() void println(boolean x) void println(char x) |
보다시피 차이점이 있다면 매개 변수의 차이가 존재한다.
내부적으로, 우리는 하나의 메소드 이름 println을 이용해 매개변수만 바꿔 편리하게 여러 기능을 이용했다는 점을 인지하고
조건을 살펴보자.
|
오버로딩의 조건 1. 메소드 이름은 같게 2. 매개변수의 개수, 또는 타입만 다르면 된다. *주의. 리턴 타입은 상관없다. |
위 조건에 맞춘 오버로딩의 예시를 살펴보자
|
옳은 예시 int add(int a, int b) int add(int a, long b) long add(long a, int b) long add(long a,long b) -> 오버로딩 o 틀린 예시 int add(int a, int b) long add(int a, int b) -> 리턴 타입은 아무런 영향을 못주기 때문에 두 메소드는 정확히 같은 것으로 간주된다. |
오버로딩에 대한 이해를 했을거라 생각하고, 실제 코드 예시를 보며 살펴보자.
import java.util.Scanner;
public class Practice_01 {
public static void main(String[] args) {
MyMath3 example = new MyMath3(); //인스턴스 생성
System.out.println(example.add(3, 3));
System.out.println(example.add(3L, 3));
System.out.println(example.add(3, 3L));
System.out.println(example.add(3L, 3L));
}
}
class MyMath3{
int add(int a, int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(int a, long b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(long 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(int a, int 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;
}
}
보다시피 매개변수의 타입(long이든, int이든)은 상관없이 계산할 수 있는 메소드add() 를 만든 것이다.
이런 식으로, add라는 메소드 이름 하나로 여러 기능을 매개변수로만 구분하여 이용할 수 있다는 점이 오버로딩의 장점이다.
'IT > JAVA' 카테고리의 다른 글
| [JAVA] Mac에서 이클립스 사용하기 - src,bin 파일 (0) | 2021.03.11 |
|---|---|
| [JAVA] 자바 생성자에 대한 모든 것 (0) | 2021.02.16 |
| [JAVA] print, println, printf의 구분 (0) | 2021.02.11 |
| [C와 JAVA] JAVA는 포인터가 없다? (0) | 2021.02.10 |
| [객체 관련 용어 정리] 객체(Object) 인스턴스(instance) 클래스(Class)를 관계를 통해 알아보자 (0) | 2021.02.10 |