1. 생성자란?
클래스의 변수들은 메서드에 의해 값이 변경될 수 도 있지만, 생성자를 사용하여 초기화시켜줄 수도 있다.
생성자는 인스턴스를 만들고, 인스턴스의 변수들을 초기화시켜주는 역할을 한다.
2. 디폴트 생성자
생성자를 정의하지 않았을 때 자바 컴파일러에서 자동으로 만들어주는 생성자를 디폴트 생성 자라 고한다.
디폴트 생성자는 매개변수가 없고 코드도 없다.
Person.java :
1
2
3
4
5
6
|
public class Person {
String name;
int age;
double height;
}
|
cs |
PersonTest.java :
1
2
3
4
5
|
public class PersonTest {
public static void main(String[] args) {
Person personKang = new Person();
}
}
|
cs |
위와 같이 Person클래스와 PersonTest클래스를 각각 만들어준다.
PersonTest의 "Person personLee = new Person();" 에서 "Person()"부분이 디폴트 생성자를 나타낸다.
3. 매개변수가 있는 생성자
생성자는 주로 멤버 변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수를 초기화하는 역할을 한다.
생성자를 하나라도 정의하면 디폴트 생성자는 사용할 수 없다. 디폴트 생성자를 사용하고 싶다면 직접 추가해 주어야 한다.
Person.java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class Person {
String name;
int age;
double height;
// 디폴트 생성자 직접 추가
public Person() {
}
// 매개변수로 이름, 나이, 키를 입력받아서
// Person클래스를 생성하는 생성자
public Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
}
|
cs |
PersonTest.java :
1
2
3
4
5
6
7
8
9
|
public class PersonTest {
public static void main(String[] args) {
Person personKang = new Person();
Person personKim = new Person("제니", 26, 162);
}
}
|
cs |
그림으로 나타내면 다음과 같다.
4. 생성자 오버로딩
위의 예처럼 매개변수의 구성을 다르게 하면 같은 이름의 생성자를 여러 개 정의할 수 있는데, 이 개념을
생성자 오버 로딩이라고 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class Person {
String name;
int age;
double height;
// 디폴트 생성자 직접 추가
public Person() {
}
// 매개변수로 이름을 입력받는 생성자
public Person(String name) {
this.name = name;
}
// 매개변수로 이름 , 나이를 입력받는 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 매개변수로 이름, 나이, 키를 입력받아서
// Person클래스를 생성하는 생성자
public Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
}
|
cs |
'자바 > 자바 개념' 카테고리의 다른 글
[Java] 캐스팅, instanceof 연산자 / 2021.11.01 (0) | 2021.11.01 |
---|---|
[Java] 상속, 상속과 protected 접근 지정자, 상속과 생성자, super () / 2021.08.02 (0) | 2021.08.02 |
[Java] for-each문, for-each문 활용 / 2021.07.28 (0) | 2021.07.28 |
[Java] ArrayList, 학생 성적 예제 문제 / 2021.07.26 (0) | 2021.07.26 |
[Java] 객체 간 협력, 교통수단 예제문제 / 2021.07.26 (0) | 2021.07.26 |