[Java] 6. 객체지향 프로그래밍 1 #3 오버로딩(overloading)

2022. 4. 27. 22:10JAVA/Language

1. 오버로딩이란 무엇인가?

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

2. 오버로딩의 조건

  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의 정석, 남궁 성 지음