2008. 8. 7. 14:35

Part 3. 생성자

1. 생성자
생성자란 객체 생성 시, 초기화를 위한 메서드로 생성자가 제공된다.
객체가 생성될 때 멤버변수를 초기화하는 일은 생성자가 한다.

생성자는 메서드의 일종이지만 이름은 반드시 클래스명과 동일해야 한다.
메서드의 앞에 리턴형을 기술하지 않고 자료형도 없다.
ex : 접근_지정자 클래스_명 (인수1, 인수2, ...) {
}

package training;
class MyDate {
 int year, month, day;
 // 객체가 생성되자마자 오늘 날짜로 초기화 -> 생성자
 public MyDate() {
  year=2008;
  month=8;
  day=7;
 }
 // 형식매개변수가 3개 있는 생성자가 d2로 호출 된다.
 public MyDate(int new_year, int new_month, int new_day) {
  year=new_year;
  month=new_month;
  day=new_day; // day : 필드, new_day : 전달인자
  System.out.println("전달인자 3개짜리 생성자");
 }
 public MyDate(int new_year, int new_month) {
  // 생성자 this() : 생성자 내애서 첫문장에 위치 하여야 한다.
  this(new_year,new_month,1);
  System.out.println("전달인자 2개짜리 생성자");
 }
 public void print(){
  System.out.println(year+"/"+month+"/"+day);
 }
 public void setDay(int day){
  // 필드에 형식매개변수 값을 저장해야 한다.
  this.day=day;
  print();
 }
 
}
public class Ex02 {
 public static void main(String[] args) {
  MyDate d=new MyDate(); // 객체 생성 시 자동으로 생성자 호출
  d.print();
  // 객체 생성하는 형식
  // new 클래스명 (생성자에 전달해줄 실매개변수 리스트);
  MyDate d2=new MyDate(2008,9,1);
  d2.print();
  d2.setDay(13);
  d2.print();
  MyDate d3=new MyDate(2008,9);
 }
}

디폴트 생성자 : 컴파일러에서 기본적으로 제공되는 되는 생성자
사용자가 생성자를 하나라도 만들게 되면 디폴트 생성자를 사용할 수 없는 점을 유의

2. 레퍼런스 this
this를 사용하는 경우
메소드의 전달인자가 객체 속성과 이름이 동일할 때,

3. 생성자 this()
같은 클래스 내의 다른 생성자를 호출할때 사용