🌱 오늘의 주제 : Java - 생성자
🌱 생성자 (constructor)
- 생성자 : 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
- 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재 할 수 있다.
1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴 값이 없다. (void 붙이지 않는다.)
클래스이름(타입 변수명, 타입 변수명,...) {
// 인스턴스 생성 시 수행될 코드,
// 주로 인스턴스 변수의 초기화 코드를 적는다.
}
class Point {
Point() {. // 매개변수가 없는 생성자.
}
Point(int x , int y) { // 매개변수가 있는 생성자.
}
Card c = new Card();
1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
2. 생성자 Card()가 호출되어 수행된다.
3. 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
🌱 기본 생성자 (default constructor)
- 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다.
- 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는 컴파일러가 제공하는 '기본 생성자' 덕분이다.
클래스이름( ) { } // 기본 생성자.
Point( ) { } // Point클래스의 기본 생성자.
- 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.
public class Data_1 {
int value;
Data_1() {} // 기본생성자를 추가 // 없어도 됨. 이유는 기본생성자를 컴파일러가 자동추가해줌. // 기본 생성자를 만드는 습관 필요.
}
public class Data_2 {
// Data_1
int value;
Data_2(int x) { //매개변수가 있는 생성자.
value = x;
}
}
public class Ex6_11 {
public static void main(String[] args) {
// default constructor
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2(); // compile error 발생. -> new Data_2(10)으로 바꾸면 됨. 매개변수가 있는 생성자 호출로..
//The constructor Data_2() is undefined
}
}
🌱 매개변수가 있는 생성자
- 생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다.
- 매개변수가 있는 생성자를 활용하면 간결하고 직관적인, 객체지향적인 코드를 작성 할 수 있다.
인스턴스를 생성할 때는 2가지 사항을 결정해야 한다.
1. 클래스 - 어떤 클래스의 인스턴스를 생성?
2. 생성자 - 선택한 클래스의 어떤 생성자로 인스턴스를 생성할 것 인가?
public class Car {
// 필드.
String color;
String gearType;
int door;
Car() {} // 기본 생성자.
Car(String c, String g, int d){ // 매개변수가 있는 생성자.
color = c;
gearType = g;
door = d;
}
public class Ex6_12 {
public static void main(String[] args) {
Car c1 = new Car(); // 기본 생성자 호출.
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);
}
'Java' 카테고리의 다른 글
Java - 클래스 간의 관계 - 포함관계 (0) | 2023.01.25 |
---|---|
Java - 생성자에서 다른 생성자 호출하기 - this ( ) (0) | 2023.01.24 |
Java - 객체를 문자로 표현하는 toString() 사용하기 (0) | 2023.01.20 |
Java - Map 컬렉션, List 컬렉션 - Iterator 반복문 사용법 (0) | 2023.01.19 |
Java - 참조형 매개변수 (0) | 2023.01.18 |