Programming/Java, Spring

[JAVA] 생성자(Constructor) / 생성자의 조건 /기본 생성자(defualt Constructor)

Juun 2022. 5. 11. 00:09
반응형

생성자(Constructor)란??

생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다

Time t = new Time(); // 객체 생성

// iv 초기화
t.hour = 12;
t.minute = 34;
t.second = 56;

Time t= new Time(12, 34, 56); // 생성자 호출

생성자는 메서드와 유사하지만 리턴값이 없다는 점이 다르다!

생성자의 조건

  1. 생성자의 이름과 클래스의 이름은 같아야 한다
  2. 생성자는 리턴값이 없다 (void 안씀)

※ 생성자도 메서드이기 때문에 리턴값이 없다는 의미의 void를 붙여야 하지만,

모든 생성자가 리턴값이 없으므로 void는 생략한다

 

Card c = new Card();
  1. 연산자가 new에 의해서 메모리에 Card 클래스의 인스턴스가 생성된다
  2. 생성자 Card() 호출 후 수행
  3. 연산자 new 의 결과로, 생성된 Card 인스턴스의 주소가 반환되어 참조변수 c에 저장

※ 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다!

'클래스 이름( )'이 생성자!

기본 생성자(defualt Constructor)란?

  • 매개변수가 없는 생성자
  • 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 자동으로 추가해준다!
  • 그래서 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다

※ 기본 생성자가 컴파일러에 의해 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을때 뿐이다!

class Data1 {
	int value;
}

class Data2 {
	int value;
    // Data2() {} 기본 생성자
    Data2(int x){	// 매개변수가 있는 생성자, 기본 생성자를 추가해줘야 에러가 안생김!!
    	value = x;
    }
}

class ConstructorTest{
	public static void main(String[] args){
    	Data1 d1 = new Data1();
        Data2 d2 = new Data2();		// 컴파일 에러 발생
    }
}

매개변수가 있는 생성자

생성자도 메서드처럼 매개변수를 선언하여 호출 시 값을 넘겨받아 인스턴스의 초기화 작업에 사용할 수 있다

class Car{
	String color;		//색상
    String gearType;	// 변속기 종류 - auto, manual
    int door;			//문의 개수
	
    Car(){} // 생성자
    Car(String c, String g, int d){ // 생성자
    	color = c;
        gearType = g;
        door = d;
    }
}

위의 iv를 초기화 하면 2가지 방법으로 초기화 할 수 있다!

 

방법1

Car c = new Car();

// iv 초기화
c.color = "white";
c.gearType = "auto";
c.door = 4;

방법2

Car c = new Car("white", "auto", 4);

방법2를 사용하면 여러줄 코드 작성해야 할거를 한 줄로 쓸 수 있다!!

둘다 맞는 방법이지만 코드의 간결화를 위해 방법2로 코드 작성하도록 하자!

반응형