java

18. 생성자

dalc3154 2025. 2. 25. 16:42

생성자(Constructor)

객체(인스턴스)가 생성될 때 호출되는 '인스턴스 초기화 메소드'

 

생성자 조건

클래스명과 동일한 이름을 사용, 리턴값이 없는 메소드 형식

(void 타입이 생략됨)

 

컴파일러가 제공하는 기본 생성자

클래스에 생성자가 하나도 없을때 자동 생성되는 빈 생성자

매개변수가 없으며 아무런 작업도 하지 않음(구현부 안에 코드가 없음)

class Example1 {
	int value;
	
	// 기본 생성자 생략
}
class Example2 {
	int value;
	
	// 사용자 정의 생성자
	// 컴파일러가 자동으로 기본 생성자를 제거
	Example2(int value) {
		this.value = value;
	}
	// 빈 생성자의 경우 직접적인 명시도 가능
	Example2() {}
}

 

사용자 정의 생성자 만들기

class Car {
	String color;
	String gearType;// auto 자동, manual 수동
	int door;
	
	Car() {}// 기본 생성자>> 차를 생성한 뒤 필드값 초기화
	
	// 사용자 정의 생성자
	Car(String color, String gearType, int door) {
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}
	
	Car(String color) {
		// 사용자 정의 생성자에서 다른 생성자 호출 가능: this()
		// 생성자 이름으로 클래스명 대신 this를 사용한다
		// 정의 생성자에서 타 생성자 호출 시 반드시 첫번째 줄에서만 호출 가능
		
		// 호출된 생성자가 변수값을 초기화하는 경우
		// 현재 생성자가 수행하는 작업을 유지하기 위함(무의미함 방지)
		this(color, "auto", 4); //37번째 줄에 작성한 사용자 정의 생성자의 호출
		//객체 생성 시 색상만 지정하는 경우
		
		door = 5;
		
		// this(color, "manual", 4);
		// 타 생성자의 호출이 해당 생성자의 기능 이후에 작성되는 경우>> 타 생성자 호출의 결과와 동일
	}
}

 

this 키워드

인스턴스 자신을 참조함 >> 모든 인스턴스 메소드와 생성자 내부에서 사용 가능

 

this() 키워드

같은 클래스 내의 다른 생성자 호출 >> 중복 코드 제거와 유지보수성 향상에 도움

'java' 카테고리의 다른 글

20. 오버라이딩  (0) 2025.02.25
19. 상속  (0) 2025.02.25
실습) 오버로딩 연습  (0) 2025.02.25
17. 메소드-4 오버로딩  (0) 2025.02.25
실습) 야구선수 평가하기  (0) 2025.02.25