메서드 오버로딩, 생성자 오버로딩과 this

Jiwontwopunch·2022년 1월 12일
0

독학

목록 보기
23/102
post-thumbnail

메서드 오버로딩

매개변수의 수가 다르거나 형이 다른 경우 같은 이름으로 메서드를 여러 개 정의할 수 있는데, 이를 메서드 오버로딩이라고 한다. 여기서 중요한 점은 매개변수의 이름은 중요하지 않다는 것이다. 자료형이 중요하다.

package javaStudy;

public class MyClass2 {
 public int plus (int x, int y) {
   return x+y;
}

 public int plus (int x, int y, int z) {
   return x+y+z;
}

 public String plus (String x, String y) {
   return x+y;
}
}
package javaStudy;

public class MethodOverloadExam {
 
 public static void main(String[] args) {
   MyClass2 m = new MyClass2();
   
   System.out.printIn(m.plus(4,5));
   System.out.printIn(m.plus("hello","world"));
   }
}

생성자 오버로딩과 this

생성자도 메서드와 마찬가지로 여러 개를 선언할 수 있다. 매개변수의 수와 형만 다르다면 생성자를 여러 개 선언할 수 있다.이를 생성자 오버로딩이라고 한다.

객체에 생성자가 하나도 없을 때는 기본 생성자가 자동으로 만들어지지만, 생성자를 하나라도 정의하면 기본 생성자가 자동으로 만들어지지 않는다. 기본 생성자를 정의하지 않았을 때 컴파일 오류가 발생(The constructor Car() is undefined)

package javaStudy;

public class Car{
 // 형 + 필드명
  String name;
  int number;
  
  public Car(String name){
   this.name = name;
  }
   
  public Car() {
    this.name = "이름없음";
    this.number = 0;
  }
  
  public Car(String name, int number) {
   this.name = name;
   this.number = number;
   }
  }
  // 위와 아래의 코드가 반복
  // 정리하자면
  public Car() {
   // this.name = "이름없음";
   // this.number = 0;
   this("이름없음",0);
  }

this 키워드는 자기 자신을 가리킨다고 했는데, this에 괄호를 붙이면 자기 자신의 생성자를 의미한다. 자기 자신의 생성자에 "이름없음"과 '0'을 넣어서 호출하면 Car 객체에 기본 생성자를 호출했을 때 String 값과 int값을 가진 생성자를 호출할 것이다.

정리하면 this는 생성자를 호출하는 방법으로 정의되지 않은 생성자는 호출할 수 없다. this() 메서드를 사용하면 코드가 중복되는 것도 방지할 수 있다. 즉 this()는 생성자 내에서 해당 클래의 다른 생성자를 호출한다.

0개의 댓글