System.out.println 메소드의 오버로딩 목록

이름이 같은 메서드(method)를 여러개 정의하는걸 오버로딩(overloading)이라고 합니다.

오버로딩을 하기 위해선 아래 조건을 만족해야 합니다.

  1. 메서드 이름이 같아야 한다
  2. 매개변수 개수나 타입이 달라야 한다
  3. (반환 타입은 관계 없음)

즉, 메서드 시그니쳐(signature)가 달라야 합니다. 자바에서 메서드 시그니쳐는 메서드 이름과 매개변수 개수, 타입으로 구성됩니다.

 

void doSomething(String[] x); // doSomething(String[])
void doSomething(String x);   // doSomething(String)

예제 1.

시그니처가 다르니 오버로딩입니다.

 

int doSomething(int x);                   // doSomething(int)
void doSomething(int y) throws Exception; // doSomething(int)

예제 2.

시그니처가 같으니 오버로딩이 되지 않습니다. 이 경우, 컴파일 시 'doSomething(int)' is already defined in 'Main' 이런 오류가 나오게 됩니다.

왜 안되는지 생각해보면, doSomething(1) 이런식으로 호출했을 때 두 메소드의 시그니쳐가 같기 때문에 어느 메소드를 호출해야할지 컴파일러가 결정할 수 없기 때문입니다.