TIL | JAVA 생성자 / 기본 생성자

김윤희·2022년 8월 1일
0

생성자와 기본 생성자

생성자란?


✔ 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드
(여기서 말하는 인스턴스란 객체(iv의 묶음)즉 인스턴스 변수를 초기화 한다는 것이다🤗)
즉, iv 초기화를 편하게 하기 위해서 사용한다

//객체 생성
Time t = new Time();
//iv 초기화
t.hour = 12;
t.minute = 34;
t.second = 56;

//위에 처럼 하게 된다면 번거롭기 때문에 아래와 같이 하는게 직관적이고 좋다

//생성자 호출(변수 초기화 하고 원하는 값 세팅)
Time t = new Time(12, 34, 56);

//생성자를 사용하기 위해서는 만들어서 추가해줘야 편리하게 사용 가능하다


생성자 작성법


  • 이름이 클래스 이름과 같아야 한다
  • 리턴값(반환값)이 없다(void 안붙임)
  • 모든 클래스는 반드시 생성자를 가져야 한다
클래스 이름(타입 변수명, 타입 변수명, ...){
	//인스턴스 생성 시 수행될 코드,
    // 주로 인스턴스 변수의 초기화 코드를 적는다
}

✔ 예시

    class Card{
        Card(){//매개변수 없는 생성자
            //인스턴스 초기화 작업
        }
        Card(String kind, int number){//매개변수 있는 생성자
            //인스턴스 초기화 작업
        }
    }


기본 생성자


  • 매개변수가 없는 생성자
  • 생성자가 하나도 없을 때만 컴파일러가 자동 추가
class Data_1{
	int value;
}

class Data_2{
	int value;
    
    Data_2(int x){
    	value = x;
    }
}

class Ex{
	public static void main(Strint args[]){
    	Data_1 d1 = new Data_1();
        Data_2 d2 = new Data_2();	//compile  error 발생!!
        //Data_2() 이름을 찾지 못하겠다고 에러가 뜬다
    }
}

✔ 원래 생성자가 하나도 없을 때, 컴파일러가 기본 생성자를 자동 추가해줘서 Data_1은 에러가 나지 않았지만,
Data_2는 하나의 생성자를 작성해주었기 때문에 기본 생성자가 만들어지지 않아서 에러가 났다

class Data_2{
	int value;
    
    Data_2(){}	//기본 생성자 추가
    
    Data_2(int x){
    	value = x;
    }
}
  • 위 처럼 기본 생성자를 직접 추가해주면 에러가 사라짐



매개변수가 있는 생성자


class Car{
	String color;
    String gearType;
    int door;

	Car (){}	//기본 생성자
    Car (String c, String  g, int d){	//매개변수가 있는 생성자
    	color = c;
        gearType = g;
        door = d;
    }
}
  • 위 처럼 iv 초기화 할 수 있는 매개변수가 있는 생성자를 작성해 놓으면
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;
  • 이렇게 여러줄을 작성해서 초기화 시켜줘야 했던 걸 아래와 같이 한줄로 끝낼 수 있다
Car c = new Car("white", "auto", 4);

✔ 위에 처럼 코드를 작성하면

  1. 참조변수 c가 생성이 되고
  2. new 연산자가 객체를 생성한다
  3. 그 다음에 생성자가 호출이 된다(= 객체가 초기화 된다)
  4. 인스턴스 주소가 참조변수 c에게 대입 된다(= new 연산자의 반환값이 참조변수에 저장)

0개의 댓글