본문 바로가기
Language/Java

[Java] 오버로딩(overloading)

by 계범 2022. 3. 2.

오버로딩이란

한 클래스 내에 매개변수의 개수나 타입이 다른 같은 이름의 메서드를 여러 개 정의하는 것.

 

오버로딩의 조건

1. 메서드 이름이 같아야 한다.

2. 매개변수의 개수 또는 타입이 달라야 한다.

 

가변인자(varargs)와 오버로딩

기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었다.

이 기능을 '가변인자(variable arguments)'라고 한다.

 

가변인자는 '타입... 변수명'과 같은 형식으로 선언한다.

 

public printStream printf(String format, Object... args){...}

 // 컴파일 에러 발생. 가변인자는 무조건 맨 마지막 선언해야함.
public printStream printf(Object... args, String format){...}
String concatenate(String s1, String s2){...}
String concatenate(String s1, String s2, String s3){...}

//가변인자 사용
String concatenate(String... str){...}

//호출
System.out.println(concatenate()); // 인자 없음
System.out.println(concatenate("a")); // 인자 1개
System.out.println(concatenate("a", "b")); // 인자 2개
System.out.println(concatenate(new String[] {"a", "b"})); // 배열도 가능

가변인자는 내부적으로 배열을 이용하는 것.

 

매개변수로 배열을 넣는 것과 차이는 위의 코드처럼 인자를 생략할 수가 없다. 

 

가변인자 주의점

class VarArgsEx {
	public static void main(String[] args) {
		String[] strArr = { "100", "200", "300" };
		
		System.out.println(concatenate("", "100", "200", "300"));
		System.out.println(concatenate("-", strArr));
		System.out.println(concatenate(",", new String[]{"1", "2", "3"}));
		System.out.println("["+concatenate(",", new String[0])+"]");
		System.out.println("["+concatenate(",")+"]");
	}

	static String concatenate(String delim, String... args) {
		String result = "";

		for(String str : args) {
			result += str + delim;
		}
		
		return result;
	}

/* 해당 주석부분은 에러 발생함.
	static String concatenate(String... args) {
		return concatenate("",args);
	}
*/
} // class

해당 오버로딩된 주석부분에서 에러가 발생하는데, 이유는 메서드가 구분되지 않아서 발생한다.

가능하면 가변인자를 사용한 메서드는 오버로딩하지 않는게 좋다.

 

참조

'Java의 정석' 책

'Language > Java' 카테고리의 다른 글

변수의 초기화, 초기화 블럭  (0) 2022.03.02
[Java] 생성자(Constructor)  (0) 2022.03.02
[Java] 변수와 메서드  (0) 2022.03.02
[Java] 객체지향언어특징과 클래스와 객체  (0) 2022.03.01
[Java] 배열(Array)  (0) 2022.03.01

댓글