[Java] OOP_생성자 (Constructor), 생성자 this()와 참조변수 this

jeong·2021년 5월 26일
0

Java 자바

목록 보기
15/28

생성자 (Constructor), 생성자 this()와 참조변수 this

인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메소드'를 말한다.
//인스턴스: =객체, iv 묶음
//인스턴스 초기화 : 인스턴스 변수에 적절한 값을 저장하는 것

  • 인스턴스 생성시 수행할 작업(iv 초기화)에 사용된다.
  • iv 초기화를 편리하게 하기 위해 생성자를 만든다.
  • 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
Card c=new Card();

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

생성자를 만드는 조건

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

클래스이름(타입변수명, 타입변수명, ... ) {
	//인스턴스 생성 시 수행될 코드
    //주로 인스턴스 변수의 초기화 코드를 적는다.  
}
//클래스 Card와 생성자 Card의 이름이 같다 
class Card {
	...
    Card() { //매개변수 없는 생성자
    	//인스턴스 초기화 작업
    }
    Card(String kind, int number) { //매개변수 있는 생성자
    	//인스턴스 초기화 작업
    }
}

2) 생성자는 return 값이 없다. (void를 붙이지 않는다.)

기본 생성자(default constructor) :

매개변수가 없는 생성자

클래스이름() { } //기본 생성자

생성자가 하나도 없을 때만 컴파일러가 자동으로 추가해준다.
하나라도 있으면 추가되지 않는다.
클래스를 만들 때 꼭 기본 생성자를 추가해주자.

//생성자 오류나는 예시 
class Data_1 {
	int value;
}

class Data_2{
	int value;
    
    Data_2(int x) { //매개변수가 있는 생성자
    	value=x;
    }
}

class Ex6_11 {
	public static void main(String[] args) {
    	Data_1 d1=new Data_1();
        Data_2 d2=new Data_2(); //컴파일 에러 발생 
    }
}
//생성자 오류 해결방법 : Data_2의 기본 생성자를 추가해준다. 
//class Data_1도 기본 생성자가 없지만 컴파일러가 하나를 자동으로 추가해준다.  
class Data_1 {
	int value;
}

class Data_2{
	int value;
    
    Data_2() { }
    Data_2(int x) { //매개변수가 있는 생성자
    	value=x;
    }
}

class Ex6_11 {
	public static void main(String[] args) {
    	Data_1 d1=new Data_1();
        Data_2 d2=new Data_2(); //컴파일 에러 해결
    }
}

매개변수가 있는 생성자

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

생성자 this()

생성자에서 다른 생성자 호출할 때 사용된다.
다른 생성자 호출시 첫줄에서만 사용 가능하다.

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

    Car2() { 
    	//Car2("white", "auto", 4);
    	this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
    }
    
    Car2(String color) { 
    	//Car2("white", "auto", 4);
    	this("white", "auto", 4); //Car2(String color, String gearType, int door) 호출
    }
    
    Car2(String color, String gearType, int door) { 
    	this.color=color; 
        this.gearType=gearType;
        this.door=door;
    }    
}

참조변수 this

인스턴스 자신을 가리키는 참조변수.
인스턴스 메소드에서 사용 가능, 인스턴스 주소가 저장되어 있다.
지역변수(lv)와 인스턴스변수(iv)를 구별할 때 사용 가능
모든 인스턴스 메소드에 지역변수로 숨겨진 채로 존재한다.

//생성자 this()와 참조변수 this는 관계없는 개념, 다르니까 헷갈려하지말자

Car(String color, String gearType, int door) {
	//인스턴스변수(iv)에 this 붙여준다. this.color는 iv, color는 lv.
    this.color=color;
    this.gearType=gearType;
    this.door=door;
}
profile
배우는 초보개발자

0개의 댓글