본문 바로가기
JAVA/객체지향

생성자

by chogigang 2023. 2. 22.

생성자

인스턴스(객체 iv묶음) 초기화 메서드 입니다

 

 

1.생성자의 이름은 클래스의 이름과 같아야 합니다

2.생성자는 리턴 값이 없습니다(void 가 안붙습니다.)(모든 클래스는 반드시 생성자를 가져야 합니다.)

3. 생성자도 오버로딩이 가능하므로 하나의 클래스에 여러개의 생성자가 존재할 수 있습니다.

 

Time t = new Time();
  t.hour =12;
  t.minute=34;
  t. second=56;


  time = new Time(12,34,56);//생성자로 이렇게

 

 

기본 생성자

 

지금까지는 생성자를 모르고도 프로그래밍을 해 왔지만 사실 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 합니다 그러나 지금까지 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는

컴파일러가 제공하는 '기본 생성자' 덕분입니다.

 

클래스 이름(){}
    Card(){}//직접 작성

 

 

매개변수도 없고 특별히 인스턴스 초기화 작업이 요구되어지지않는다면 생성자를 정의하지 않고 컴파일러가 제공하는 

기본 생성자를 사용하는 것도 좋습니다.

 

class ConstructorTest{
    public static void main(String[] args){
        Data1 d1 = new Data1();
        Data2 d2 = new Data2();//기본 생성자 호출      //컴파일러 에러 발생  이름을 이해할수 없다고 뜹니다.
        /*Data1에는 정의되어 있는 생성자가 하나도 없으므로 컴파일러가 기본 생성자를 추가해주었지만
        * Data2에는 이미 생성자 Data2(int)가 정의되어 있으므로 기본 생성자가 추가되지 않았기 때문입니다,*/
    }
}

 

매개변수 있는 생성자

인스턴스를 생성한 다음에 인스턴스 변수의 값을 변경하는 것보다 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만듭니다.

 

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

    // 생성자
    Car(){};

    // 매개변수가 있는 생성자
    Car(String c, String g, ing d){
        color = c;
        gearType = g;
        door = d;
    }
}

// 비효율적
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;

// 효율적
Car c = new Car("white", "auto", 4);

 

생성자에서 다른 생성자 호출하기 -this() , this

 

 

생성자의 이름으로 클래스이름 대신 this를 사용합니다

한생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능합니다.

 

 

 

 

this 는 참조 변수로 인스턴스 자신을 가르킵니다.(지역변수(iv)와 인스턴스iv를 구별할때 사용합니다) ( iv는 인스턴스 변수)

this를 사용할수 있는 것은 인스턴스멤버뿐입니다.

 

this 인스턴스 자신을 가르키는 참조변수,인스턴스의 주소가 저장되어 있습니다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재합니다.

 

this(),tihs(매개변수) 생성자, 같은 클래스의 다른생성자를 호출할 때 사용합니다

 

this,this() 는 완전 다른 것입니다.

 

tihs 는 '참조변수'      this()는 '생성자'

'JAVA > 객체지향' 카테고리의 다른 글

상속  (0) 2023.02.23
변수의 초기화  (0) 2023.02.23
오버로딩 ,오버라이딩  (0) 2023.02.22
클래스 메서드(static)와 인스턴스 메서드  (0) 2023.02.22
기본형 매개변수와 참조형 매개변수  (0) 2023.02.22