[Java] 6. 객체지향 프로그래밍 1 #3 오버로딩(overloading)
2022. 4. 27. 22:10ㆍJAVA/Language
1. 오버로딩이란 무엇인가?
- 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
2. 오버로딩의 조건
- 메서드의 이름이 같아야함
- 매개변수의 개수 또는 타입이 달라야함
- 단, 반환타입은 오버로딩을 구현하는데 아무 영향을 주지 않음
3. 오버로딩의 예제
public class Calculator {
public int add(int a, int b)
{
System.out.println("int add(int a, int b) -");
return a + b;
}
public long add(int a, long b)
{
System.out.println("long add(int a, long b) -");
return a + b;
}
public long add(long a, int b)
{
System.out.println("long add(long a, int b) -");
return a + b;
}
public long add(long a, long b)
{
System.out.println("long add(long a, long b) -");
return a + b;
}
public int add(int[] arr)
{
System.out.println("int add(int[] arr) -");
int sum = 0;
for(int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
return sum;
}
}
4. 오버로딩의 장점
- 근본적으로 같은 기능을 하는 메서드를 구현할 때 좋음
- 예를 들어 println과 같은 메서드들은 출력이라는 기능은 근본적으로 같지만 매개변수로 들어가는 타입은 다르다는 점이 오버로딩의 대표적인 사례
5. 가변인자(varargs)와 오버로딩
- 메서드의 매개변수에 '타입... 변수명'과 같은 형식으로 선언
- 가변인자는 매개변수 중에서 제일 마지막에 선언되어야함
- 가변인자에는 배열이 들어갈 수 있음
- 가변인자의 대표적인 사례는 printf(String format, Object... args) 메서드
public PrintStream printf(String format, Object... args)
가변인자의 예제는 다음과 같이 사용할 수 있습니다.
public class VarArgs {
public static String concatenate(String dlim, String... args) {
String result = "";
for(String str : args)
{
result += str;
}
return result;
}
// 두 오버로딩 메서드가 구분이 되지 않음
// public static String concatenate(String... args)
// {
// return concatenate("", args);
// }
}
public class Driver {
public static void main(String[] args)
{
String[] strArr = {"100", "200", "300"};
System.out.println(VarArgs.concatenate("", "100", "200", "300"));
System.out.println(VarArgs.concatenate("-", strArr));
System.out.println(VarArgs.concatenate(",", new String[] {"1", "2", "3"}));
System.out.println("[" + VarArgs.concatenate(",", new String[0]) + "]");
System.out.println("[" + VarArgs.concatenate(",") + "]");
}
}
실행결과
100200300
100200300
123
[]
[]
References
source code : https://github.com/yonghwankim-dev/java_study
Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java] 7. 객체지향 프로그래밍 2 #1 상속(inheritance) (0) | 2022.04.29 |
---|---|
[Java] 6. 객체지향 프로그래밍 1 #5 변수의 초기화 (0) | 2022.04.29 |
[Java] 6. 객체지향 프로그래밍 1 #4 생성자(Constructor) (0) | 2022.04.28 |
[Java] 6. 객체지향 프로그래밍 1 #2 변수와 메서드 (0) | 2022.04.26 |
[Java] 6. 객체지향 프로그래밍 1 #1 객체지향언어 & 클래스와 객체 (0) | 2022.04.26 |