먼저, new 연산자와 생성자의 구분을 하자.
Card c1 = new Card();
- new : new 연산자라고 불리며, 인스턴스를 생성
- Card() : 생성자라고 불리며, 인스턴스 변수를 초기화하는 '인스턴스 초기화 메소드'
생성자란 인스턴스를 생성하는 것이 아닌 인스턴스를 초기화해주는 메소드이다.
생성자는 원래, 모든 클래스에는 하나 이상은 존재해야한다.
그런데 클래스에 생성자가 정의되지 않은 경우에는 컴파일러가 대신 '기본 생성자'를 제공해준다.
그래서 생성자를 몰랐던 우리가 생성자를 정의하지 않고도, 인스턴스를 생성할 수 있었던 것이다!
결국 둘 다 동일한 형태라고 보면 된다. | |
class Card { int number; String name; } |
class Card { int number; String name; Card() { }; //컴파일러가 만든 기본 생성자 } |
위와 같이 클래스 내부에 생성자가 보이지 않아도 컴파일러의 도움을 받아 생성자가 존재한다는 걸 알았으니,
이제 생성자가 눈에 보일 때의 특성들을 살펴보자.
생성자의 특징 |
1. 클래스명과 생성자 이름이 동일해야한다. |
예시
Card란 클래스를 선언하여 내부 멤버변수를 전공(major) 과 팀 번호(team)으로 선언 -첫 번째 생성자(전공과, 팀이 정해진 경우) 여기 this는 참조변수 this -두 번째 생성자(팀만 정해진 경우) this(매개변수)로 다른 생성자 호출 -세 번째 생성자(전공만 정해진 경우) this(매개변수)로 다른 생성자 호출 -네 번째 생성자(아무것도 정해지지 않은 경우) this(매개변수)로 다른 생성자 호출 |
위 예시를 보면 한 Card 클래스 안에 여러 생성자가 보일 것이다.
또한, 여러 생성자가 서로서로 호출을 하여 유기적으로 연결해주는게 point다!
이런 방법으로 여러 생성자를 구현해놓아
인스턴스 생성 시 어떤 형태로 형성할지 초반에 틀을 잡아 놓는 것이다.
cf) 위 예시에서 사용된 this의 사용법 2가지
1. 인스턴스 자기자신을 가르키는 참조 변수로 사용된 this. (at. 첫 번째 생성자)
2. 다른 생성자를 호출하기 위한 this()
이 경우에 전제 조건이 존재
1) 반드시 첫 줄에서 사용
마지막으로, 생성자를 이용하여 인스턴스를 복사하는 경우가 많다고 하여 코드 예시를 올려본다.
class Practice_01 {
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car(c1); //c1의 복사본 c2를 생성
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);
System.out.println();
c1.door = 100;
System.out.println("c1.door = 100; 수행 후");
System.out.println();
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);
}
}
class Car {
String color;
String gearType;
int door;
Car() {
this("white","auto",4);
}
Car(Car c) {
color = c.color;
gearType = c.gearType;
door = c.door;
}
Car(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
내가 공부하면서 참고한 블로그
오늘도 같이 공부해주셔서 감사합니다!!!
'IT > JAVA' 카테고리의 다른 글
[JAVA] 상속관계를 통한 final 연산자 맛보기 (0) | 2021.03.11 |
---|---|
[JAVA] Mac에서 이클립스 사용하기 - src,bin 파일 (0) | 2021.03.11 |
[JAVA] 오버로딩에 대해서 (0) | 2021.02.15 |
[JAVA] print, println, printf의 구분 (0) | 2021.02.11 |
[C와 JAVA] JAVA는 포인터가 없다? (0) | 2021.02.10 |