생성자

Munang·2021년 11월 29일
0

자바의 정석

목록 보기
5/6
  • 생성자란?: 인스턴스 초기화 메서드이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용된다.

  • 생성자의 조건

    • 생성자의 이름은 클래스의 이름과 같다.
    • 생성자는 리턴 값이 없다.
  • 주의할 점

Card c = new card();
  1. 연산자 new에 의해 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
  2. 생성자 Card()가 호출되어 수행된다.
  3. 연산자 new의 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.

기본 생성자

  • 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있음
  • 생성자가 하나도 정의되어 있지 않은 경우, 기본 생성자가 자동으로 컴파일러에 의해 제공된다.

매개변수가 있는 생성자

  • 매개변수를 넣어서 만들 수도 있다.
class Car{
		String color;
		String gearType;

		Car() {} // 생성자
		Car(String c, String g, int d){ // 매개변수가 있는 생성자
			
			color c;
			gearType = g;
			door = d;
			}
	}

생성자에서 다른 생성자 호출하기 - this(), this

  • 생성자의 이름으로 클래스이름 대신 this를 사용한다.
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.

→ 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미

this() 호출하기

Car(String color, String gearType, int door){
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}

Car(){
		this("white","auto",4);
	}

this함수는 생성자간의 호출 시에는 생성자의 이름 대신 this를 사용한다.

this호출

Car(String color, String gearType, int door){
	this.color = color;
	this.gearType = gearType;
	this.door = door;
	}

생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에는

이름만으로 두 변수가 서로 구별이 안 된다. 이런 경우에는 this키워드를 사용하면 된다.

this를 사용할 수 있는 것은 인스턴스 멤버뿐이다. static메서드에서는 인스턴스 멤버들을 사용할 수 없는 것처럼 this 역시 사용할 수 없다. 왜냐하면, static메서드는 인스턴스를 생서하지 않고도 호출될 수 있으므로 static 메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문이다.


생성자를 이용한 인스턴스의 복사

class Car{
	String color;
	String gearType;
	int door;

	Car(){
		this("white", "auto", 4);	
	}

	Car(String color, String gearType, int door){
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}

	Car(Car c){
		color = c.color;
		gearType = c.gearType;
		door = c.door;
	}

	Car c1 = new Car();
	Car c2 = new Car(c1); //c1의 복사본 c2를 생성한다. 
}

0개의 댓글