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

//생성자 코드
class Calculator {			//클래스명
	int left, right;
    
    public Calculator(){			//기본생성자
    	int vlaue;
    }
    
    public Calculator(int left){		//생성자 오버로딩, 매개변수가 있는 생성자
    	this.left = left;
	}
    
    public Calculator(int left, int right){	//생성자 오버로딩,매개변수가 있는 생성자
    	this.left = left;
        this.right = right;
	}

	public void sum(){
    	System.out.println(this.left + this.right);}
    
	public void avg(){
    	System.out.println((this.left + this.right)/2);}
}

public class CalculatorDemo1 {
	public static void main(String[] args){
    
    Calculator a = new calculator();	//기본생성자
    Calculator c1 = new Calculator(10,20);	//매개변수가 있는 생성자
    c1.sum();
    c1.avg();
    
    Calculator c2 = new Calculator(20,40);	//new 뒤에있는 Calculator는 클래스에 있는 생성자를 의미한다.
    c2.sum();					  
    c2.avg();
    }

}

상단의 코드를 확인하면 생성자와 클래스이름이 같은것을 확인할수 있는데

생성자는 클래스가 생성될때 클래스와 동일한 이름을 갖고있는 메서드가 실행하고, 어떤 메소드보다 가장 먼저 실행되도록 되어있다.

 

생성자의 조건

1. 생성자와 클래스의 이름이 같아야한다! (오버로딩 가능)

2. 리턴값이 없다(리턴값이 없음에도 불구하고 void를 안붙인다)

3. 모든 클래스는 반드시 생성자를 가져야한다. (내부적으로 동일한 이름의 메서드가 없는경우 컴파일러가 자동으로 생성을 해준다) 

 

추가로 상단의 코드에서 사용되는 this의 대한 설명도 진행하겠다.


this는 크게 this() - 생성자, this - 참조변수 2가지 용도로 사용되는데 코드를 확인하면서 설명하겠다.

 

생성자 this() - 같은 클래스안에 있는 생성자가 다른 생성자를 호출할때 사용한다.

코드중복을 줄이기는게 주요 목적인데 하단의 코드를 참고하길 바란다.

//생성자 this
class Car{
    String color;
    String gearType;
    int door;
    
/*    Car(String color){			//A
    	this.color ="white"
        this.gearType = "auto",
        thos.door = 4;
    }*/

/*    Car(String color,String gearType){	//B
    	this.color ="white"
        this.gearType = "auto",
        this.door = 4;
    }*/
    
    Car(){					//C
    	this("white","auto",4);			//매개변수를 3개 받는 E호출
    }
    
    Car(){					//D
    	this("black","auto",4);			//매개변수를 3개 받는 E호출
    }

    Car(String c, String g,int d){		//E
    	color = c;
        gearType = g;
    	door = d;
        //door = d						
    }
}

 

생성자 this의 특징은

1. 다른 생성자 호출시 첫번째줄에서만 사용가능

2. 코드중복을 줄이기 위한 목적으로 사용된다. (A,B의 코드중복을 호출하는 형식으로 바꾼것이 C,D이다.)

3. this는 객체를 구별해주며(필드에 this를 붙여 LV와 필드를 구분 -> 메모리 절약효과 ->효율적인 인스턴스 관리)

4. 효율적인 인스턴스 관리가 가능하다.

 

 

//인스턴스 - 객체가 메모리에 할당되어 실제로 사용되는것


참조변수 this (이하 참조this)

(this.에서 뒤에붙는 .(점) 은 ~안에 라고 생각하면 된다.)

 

지역변수(LV)와 인스턴스변수(IV)를 구별할때 사용

Car(String c,String g,int d){		//(A)
    //color,gearType,door는 iv, c,g,d는 lv
    
    color = c;					//IV = LV
    gearType = g;				//IV = LV
    door= d;					//IV = LV
}

Car(String color, String gearType,int door){	//(B)
    //하단의 this.color,this.gearType,this.door는iv
    //상단의 color,gearType,door는 lv

    this.color = color;				//IV = LV
    this.gearType = gearType;			//IV = LV
    this.door= door;				//IV = LV
    //door = door 	 			//LV = LV
}

상단의 코드를 특징과 연관하자면

(B)코드의 마지막 door(이하 K)= door(이하 Z)를 확인해보면 K와 Z가 어떤것이 LV이고 IV인지 구분할수 없는데 이러한 불편함을 없애고자 나타난게 참조 this이다.

 

참조this의 특징은

1. static 메서드에선 참조this사용불가

2. 인스턴스 메서드에서만 사용이 가능하다.

3. IV에 this가 없는경우 this를 자동으로 붙여준다.

'JAVA' 카테고리의 다른 글

예외에 관하여  (0) 2023.02.24
중첩클래스  (0) 2023.02.21
오버로딩  (0) 2023.02.02
매개변수  (0) 2023.01.31
메서드  (0) 2023.01.30

+ Recent posts