[실습] 생성자 만들기
package constructor;
public class Person {
String name;
float height;
float weight;
}
[실습] 생성자 테스트하기
package constructor;
public class PersonTest {
public static void main(String[] args) {
Person personLee = new Person(); //생성자
}
}
자바에서 클래스를 생성할 때 사용하는 Person( ) 같은 함수를 생성자라 한다.
클래스의 멤버 변수는 메서드에 의해 값이 변경될 수도 있지만, 처음 클래스를 생성할 때 값을 정해야 하는 경우도 있다.
생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것이다.
[실습] 생성자 추가하기
package constructor;
public class Person {
String name;
float height;
float weight;
// 디폴트 생성자
public Person() { }
//사람 이름을 매개변수로 입력받아 Person 클래스를 생성하는 생성자
public Person(String pname) {
name = pname;
}
}
디폴트 생성자(default constructor)는 우리 눈에 보이지는 않지만 생성자가 없는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어준다. 디폴트 생성자는 매개변수가 없고 구현 코드도 없다.
생성자는 멤버 변수에 대한 값들을 매개변수로 받아 인스턴스가 새로 생성될 때 멤버 변수 값들을 초기화하는 역할을 한다.
즉, 인스턴스가 생성됨과 동시에 멤버 변수의 값을 지정하고 인스턴스를 초기화하기 위해 생성자를 직접 구현하여 사용한다.
위처럼 클래스에 생성자가 두개 이상 제공되는 경우를 생성자 오버로드(constructor overload)라 한다. 필요에 따라 매개변수가 다른 생성자를 여러 개 만들 수 있다. 클래스에 생성자를 여러 개 제공하면 이 클래스를 사용하는 코드에서 원하는 생성자를 선택해 사용할 수 있다.
public class Student {
int studentID;
//학번을 매개변수로 입력받아 Student 클래스를 생성하는 생성자
public Student(int studentID) {
this.studentID = studentID;
}
}
이와 같은 경우 항상 학번을 사용하여 Student 클래스를 생성할 수 있다. 이 경우 디폴트 생성자를 구현하지 않는다. 학생이 생성될 때 학번이 꼭 필요하기 때문.
※ this는 생성된 인스턴스 스스로를 가리키는 예약어이다.
[실습] 생성자 사용하기
package constructor;
public class Person {
String name;
float height;
float weight;
// 디폴트 생성자 직접 추가
public Person() { }
//사람 이름을 매개변수로 입력받아 Person 클래스를 생성하는 생성자
public Person(String pname) {
name = pname;
}
//이름, 키 몸무게를 매개변수로 입력받는 생성자
public Person(String pname, float pheight, float pweight) {
name = pname;
height = pheight;
weight = pweight;
}
}
[실습] 테스트 클래스 구현하기
package constructor;
public class PersonTest {
public static void main(String[] args) {
//디폴트 생성자로 클래스를 생성한 후 인스턴스 변수값을 따로 초기화
Person personKim = new Person();
personKim.name = "김유신";
personKim.weight = 85.5f;
personKim.height = 180.0f;
//인스턴스 변수 초기화와 동시에 클래스 생성
Person personLee = new Person("이순신", 175, 75);
}
}
위 예제는 디폴트 생성자를 사용하는 경우와 매개변수가 있는 생성자를 사용하는 두 가지 경우를 보여준다.
'Language > Java' 카테고리의 다른 글
[Java] 정보 은닉 (0) | 2022.10.10 |
---|---|
[Java] 참조 자료형 (0) | 2022.10.01 |
[Java] 클래스와 인스턴스 (0) | 2022.09.28 |
[Java] 메서드 (0) | 2022.09.27 |
[Java] 클래스 (0) | 2022.09.22 |