Java] Overloading, 오버로딩

Overloading

  1. Method 이름이 같아야 한다

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

  3. 리턴타입이 다른 경우는 오버로딩에 성립되지 않는다.

    메서드 호출문을 기준으로 호출되어야할 메서드를 구분할 수 없기 때문이다.

1
2
3
4
5
6
7
8
9
public class Test {
public Test(int a, int b) {
System.out.println(a + " " + b);
}

public static void main(String[] args) {
Test test = new Test(5, 'a');
}
}

이럴 경우에는 안될 것 같지만, 자동 형변환이 이뤄져서 5 97이라는 결과값이 나오게 된다.

그렇다면 오버로딩을 해서 2번째 인자에 char형식을 받게 되면 어떠한 결과가 나올까?

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
public Test(int a, int b) {
System.out.println(a + " " + b);
}

public Test(int a, char b) {
System.out.println(a + " " + b);
}

public static void main(String[] args) {
Test test = new Test(5, 'a');
}
}

결과값은 타입에 맞게 들어가서 5 a가 나온다.

오버로딩의 가장 대표적인 Method로는 System.out.println()이 있다.

참고. 생성자와 this

Constructor, 생성자

  • 객체를 생성할 때 new 키워드와 함께 호출(객체 생성 외에는 호출X)
  • 인스턴스를 초기화하는 코드가 구현됨(주로 멤버 변수 초기화)
  • 반환값 X, 상속X
  • 생성자는 클래스 이름과 동일

this

  • 자신의 메모리를 가리킴 -> 인스턴스 변수
  • 생성자에서 다른 생성자를 호출 -> super와 유사한 역할을 함
  • 인스턴스 자신의 주소를 반환