
// 객체 생성
Time t = new Time();
// iv 초기화
t.hour = 12;
t.minute = 34;
t.second = 56;
// 생성자 호출
Time t = new Time(12,34,56);
생성자도 오버로딩이 가능해 하나의 클래스에 여러 개의 생성자가 존재할 수 있다.
class Card {
...
//생성자 오버로딩
Card(){ //매개변수 없는 생성자
// 인스턴스 초기화 작업
}
Card(String kind, int number){ //매개변수 있는 생성자
// 인스턴스 초기화 작업
}
}
주의할 점은 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것은 아니다!
인스턴스 생성 과정
Card c = new Card();
- 연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성된다.
- 생성자 Card()가 호출되어 수행된다.
- 연산자 new의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장된다
클래스이름() {} //기본 생성자
Point() {} //Point 클래스의 기본 생성자
class Data_1 {
int value;
}
class Data_2 {
int value;
Data_2(int x) { // 매개변수가 있는 생성자
value = x;
}
}
class Ex6_11 {
public static void main(String[] args){
Data_1 d1 = new Data_1(); //ok
Data_2 d2 = new Data_2(); // 컴파일 에러 발생
}
}
class Car{
String color; // 색상
String gearType; // 변속기 종류 - auto(자동), manual(수동)
int door; // 문의 개수
Car(){}// 기본생성자
Car(String c, String g, int d){ // 매개변수가 있는 생성자
color = c;
gearType = g;
door = d;
}
}
// 생성자 없을 때 : 연산자 new로 인스턴스 생성 후 생성자 호출하고 초기화 진행
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;
// 생성자 있을 때 : 생성자 통해서 동시에 초기화 가능
Car c = new Car("white","auto",4);
// 비교적으로 더 간단하게 코드 작성 가능
😭
오늘 강의를 듣고 실습을 진행하면서 자꾸 에러 코드라는 표시를 봤다. 인스턴스 생성에서 나는 오류였다.. 매개변수가 있는 생성자를 선언하고 빈 내용의 생성자를 통해 인스턴스를 생성하려고 해서였다. 실습 진행하는 데 애를 먹고 결국 생성자 부분 강의와 자바의 정석 책으로 이 부분을 다시 공부했다.. 아무것도 없는 빈 생성자는 생성자가 하나도 없을 때만 컴파일러가 자동 추가!! 한다는 걸 잊지 않기 위해 남겨놓는다.
참고 자료:
내일배움캠프 강의 (Java 문법 종합반 KDT 실무형 스프링 백엔드 엔지니어 양성과정 4회차)
책 자바의 정석 1 (남궁성저자)
자바의 정석 강의 https://youtu.be/HXh2ZSgg-oQ?si=_S54gJfIVxexeY9S