Java/모두의 자바

Chapter 06-32 생성자

계란💕 2022. 2. 7. 11:41

06-32.1 생성자란?

 

  Ex) 생성자가 메서드와 다른 점

public class CarExam2 {
	자료형 필드명;
	public 클래스명(매개변수 목록) { 생성자 블록
		...
	}
}

  Note)

  - 생성자는 메서드와 비슷하게 생겼으나 생성자만의 특징이 있다. 

  - 생성자를 정의하는 부분에 public 클래스명(매개변수 목록)을 볼 수 있다. 

  - 생성자는 메서드와 다르게 "반환자료형"을 가지지 않는다. 

  - 프로그래머가 생성자를 만들지 않으면 컴파일할 때 매개변수가 없는 생성자가 자동으로 만들어진다. 

  - 기본 생성자: 매개 변수가 없는 생성자이며 프로그래머가 생성자를 하나라도 만들면 자동으로 만들어지지 않는다. 

 

 

06-32.2

  Ex)

package javaStudy;
public class CarExam2 {
	public static void main(String[] args) {
		Car c1 = new Car();
	}
}

  Note)

  - 코드를 보면 Car 생성자를 호출하고 있다. 그런데 Car.java 파일에서 Car객체를 보면 생성자를 만든 적이 없다. 

  - 이 경우 컴파일러가 기본 생성자를 만든 것이다. 

 

 

06-32.3. 생성자 정의하기 

  Ex)

<hide/>
package javaStudy;
public class Car{
	// 형 + 필드명
	String name;
	int number;
	
	public Car(String n) {
		name = n;
	}	
}

  Note) 

  - 생성자는 객체가 만들어질 때 필드를 초기화하는 역할을 수행한다. 

  - 자동차 객체가 만들어질 때 반드시 이름을 가지게 하기위해 생성자를 만든다.  

  - 이름을 받을 수 있는 매개변수를 필드인 name에 넣는다. 

  - 이 때, Car객체를 생성하면서 name을 초기화한다. 

  - 생성자를 추가하니 아까 기본 생성자를 이용해 만든 Car객체 c1에 에러가 발생한다. 

  - 사용자가 생성자를 하나라도 추가하면 기본 생성자는 만들어지지 않는다.  

  - 따라서 생성자를 추가하면 기본 생성자를 이용해 Car객체를 생성할 수 없다. 

  - 그러므로 사용자가 정의한 생성자를 이용해 객체를 만들면 된다. 

 

 

06-32-4 사용자가 정의한 생성자 이용하기

  Ex)

<hide/>

package javaStudy;
public class CarExam2 {
	public static void main(String[] args) {

//		Car c1 = new Car();
		Car c2 = new Car("소방차");
		Car c3 = new Car("구급차");
		System.out.println(c2.name);
		
	}
}

  Note)

  - 정의한 생성자는 매개변수로 String 값을 받겠다고 했기 때문에 괄호 안에 String 값을 넣는다

  - 이렇게 객체를 생성하면 에러 없이 객체가 잘 생성된다. 

  - 출력결과로 소방차가 나오는 것으로 보아 객체를 생성할 때  필드 값이 초기화되는 걸 알 수 있다.

  - c2와 c3는 소방차과 구급차라는 name을 가지는 Car 객체를 참조한다. 

 

 

06-32-5 생성자 실습 ) Person클래스에 생성자를 추가하라. 

  int형 변수를 매개변수로 받아서 age 값을 초기화 하라.

 

  Ex)

<hide/>

package javaStudy;

class Person {
	int age;	
	public Person(int a) {
		age = a;
	}

}

 

<hide/>

package javaStudy;
public class PersonExam {
	public static void main(String[] args) {
		Person person = new Person(25);	
		System.out.println(person.age);
	}
}

 

  Note) 출력 결과: 25 

  - 생성자는 객체를 생성할 때 필드값을 초기화한다. 

  - 객체를 생성할 떄 "new 클래스명();"문법을 쓰는데  클래스명 뒤에 괄호()가 생성자를 의미한다. 

  - new 클래스명() : 메게변수에 int 형 변수가 들어있으므로 생성자 중에 int형 매개변수를 가진 생성자를 호출한다.

 

'Java > 모두의 자바' 카테고리의 다른 글

Chapter 06-34 메서드 오버로딩  (0) 2022.02.07
Chapter 06-33 this  (0) 2022.02.07
Chapter 05-31 열거형(Enum)  (0) 2022.02.06
Chapter 05-30 변수의 스코프와 static  (0) 2022.02.05
Chapter 05-29 String 클래스의 메서드  (0) 2022.02.05