티스토리 뷰
# 생성자(constructor)
생성자란 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'이다.
* 인스턴스 초기화 : 인스턴스 변수들을 초기화하는 것
생성자는 인스턴스 변수(iv) 초기화를 편리하게 하기 위해 만든다.
따라서 인스턴스 생성 시 수행할 인스턴스 변수(iv) 초기화 작업에 주로 사용된다.
▶생성자의 조건
① 생성자의 이름은 클래스의 이름과 같아야 한다.
② 생성자는 리턴 값이 없다.
→ 초기화는 대부분이 대입문이라 대입만 하면 되기에 결괏값을 반환할 게 없어서 리턴 값이 없다.
③ 모든 클래스는 반드시 1개 이상의 생성자를 가져야 한다.
▶생성자의 오버로딩
생성자도 오버로딩이 가능하므로 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.
- 생성자 오버로딩은 클래스 이름과 생성자의 이름이 같아야 한다.
- 매개변수의 수와 타입이 다르다면 여러 개의 생성자를 선언할 수 있다.
# 기본 생성자(default constructor)
기본 생성자는 매개변수가 없는 생성자로 원래는 직접 작성해야 하지만, 생성자가 하나도 없을 경우에 컴파일러가 자동으로 추가하여 컴파일한다.
단, 생성자가 하나라도 있을 때는 기본 생성자를 직접 추가해야 한다.
예제 1-1) 기본 생성자(컴파일 에러)
class Data_1{
int value;
}
class Data_2{
int value;
Data_2(int x){ //매개변수가 있는 생성자
value = x;
}
}
public class Ex6_11 {
public static void main(String[] args) {
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2();
}
}
위의 예제를 컴파일하게 되면 다음과 같은 컴파일 에러가 발생한다.
→ error : The constructor Data_2() is undefined
에러 해석 : Data_2클래스에서 Data_2()라는 생성자를 찾을 수 없다.
해결 방법 : Data_2 class에 기본 생성자를 추가한다.
예제 1-2) 기본 생성자(컴파일 에러 해결)
class Data_1{
int value; //셍성자가 하나도 없어서 컴파일러가 생성자를 자동 추가함
}
class Data_2{
int value;
Data_2() {}; //기본 생성자 추가
Data_2(int x){ //매개변수가 있는 생성자
value = x;
}
}
public class Ex6_11 {
public static void main(String[] args) {
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2();
}
}
'예제 1-1)'에서 발생한 컴파일 에러를 Data_2클래스에 직접 기본 생성자인 'Data_2() {}'를 추가함으로써 에러가 해결된 것을 알 수 있다. 이처럼 매개변수가 있는 생성자는 기본 생성자를 직접 추가해야 컴파일 에러가 발생하지 않는다.
# 매개변수가 있는 생성자
생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업이 사용할 수 있다.
인스턴스를 생성할 때 기본생성자는 인스턴스 생성후, 인스턴스 변수들을 따로 초기화 해주어야하지만,
매개변수가 있는 생성자를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수있게된다.
이처럼 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만든다.
예제) 매개변수가 있는 생성자
class Car{
String color;
String gearType;
int door;
Car() {}
Car(String c, String g, int d) { // 매개변수가 있는 성상자
color = c;
gearType = g;
door = d;
}
}
class Ex6_12 {
public static void main(String[] args) {
Car c1 = new Car("white","auto",4);
// c1.color = "white";
// c1.gearType = "auto";
// c1.door = 4;
Car c2 = new Car("white", "auto", 4);
System.out.println("c1의 color = " + c1.color + ", gearType = " + c1.gearType +
", door = " + c1.door);
System.out.println("c2의 color = " + c2.color + ", gearType = " + c2.gearType +
", door = " + c2.door);
}
}
* 출력 결과
c1의 color = white, gearType = auto, door = 4
c2의 color = white, gearType = auto, door = 4
'개발 공부 > JAVA' 카테고리의 다른 글
[JAVA] ArrayList (0) | 2024.08.05 |
---|---|
[JAVA] 문자열(String) 함수 정리 (0) | 2024.04.18 |
[Java] 오버로딩(overloading) (0) | 2022.02.17 |
[Java] static 메서드와 인스턴스 메서드 (0) | 2022.02.17 |
[Java] return문, 호출 스택, 기본형/ 참조형 매개변수 (0) | 2022.02.11 |
- Total
- Today
- Yesterday
- 객체지향 언어
- 인스턴스 메서드
- 호출스택
- Java
- 클래스와 객체
- return문
- 생활코딩
- 프로그래머스
- 객체의 구성요소
- 기본형/참조형 매개변수
- MySQL
- 매개변수가 있는 생성자
- continue문
- 두 수의 나눗셈
- 객체 배열
- JAVA의 정석
- 객체지향
- SQL
- java의 정석기초
- do-while문
- JAVA 의 정석
- 조건문 if
- java의정석 기초
- Lv.0
- 코테
- string 배열
- 2차배열 예제
- 메서드 간의 호출과 참조
- 자바의 정석
- 기본 생성자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
31 |