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 |