[JAVA] 자바 생성자에 대한 모든 것
IT/JAVA

[JAVA] 자바 생성자에 대한 모든 것

먼저, new 연산자와 생성자의 구분을 하자.

Card c1 = new Card();

 - new : new 연산자라고 불리며, 인스턴스를 생성

 - Card() : 생성자라고 불리며,  인스턴스 변수를 초기화하는 '인스턴스 초기화 메소드'

생성자란 인스턴스를 생성하는 것이 아닌 인스턴스를 초기화해주는 메소드이다.

 

생성자는 원래, 모든 클래스에는 하나 이상은 존재해야한다.

그런데 클래스에 생성자가 정의되지 않은 경우에는 컴파일러가 대신 '기본 생성자'를 제공해준다.

그래서 생성자를 몰랐던 우리가 생성자를 정의하지 않고도, 인스턴스를 생성할 수 있었던 것이다! 

결국 둘 다 동일한 형태라고 보면 된다.
class Card {
       int number;
       String name;
}
class Card {
       int number;
       String name;
       Card() { }; //컴파일러가 만든 기본 생성자 
}

위와 같이 클래스 내부에 생성자가 보이지 않아도 컴파일러의 도움을 받아 생성자가 존재한다는 걸 알았으니, 

이제 생성자가 눈에 보일 때의 특성들을 살펴보자.

생성자의 특징

1. 클래스명과 생성자 이름이 동일해야한다.
2. 매개변수를 선언하여 사용할 수 있다.
3. 여러 생성자가 존재할 수 있다.
4. 여러 생성자 간 서로 호출을 통해 이용한다. 
    단, 4번의 경우 조건 존재 1) 생서자 이름 대신 this를 사용하여 표현   
                                         2) 생성자 메소드 내 반드시 첫 줄에서만 호출이 가능

예시

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;
	}
}

내가 공부하면서 참고한 블로그

m.blog.naver.com/PostView.nhn?blogId=bitcoding&logNo=221438684911&categoryNo=8&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[비트코딩 자바 6] Java 자바 생성자 의미와 사용법

안녕하세요 최초의 문제은행식 코딩 문제집 비트코딩입니다!​이번 포스팅에서는 자바에서 생성자(Constru...

blog.naver.com

 

 

오늘도 같이 공부해주셔서 감사합니다!!!