[Java] 생성자 / this / this()

Minuuu·2023년 2월 1일
0

Java

목록 보기
14/18

생성자

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

위의 문구가 이해가 잘 안간다면 아래의 예시를 보자

class Car{
	int speed; // 인스턴스 변수
    void start(){ //인스턴스 메서드
    }
    void car(int speed){ // 이 부분이 생성자!!!
        this.speed = speed; 
        // 이 부분은 인스턴스 변수 speed를 매개변수 speed로 초기화
        this는 나중에 이해하자
    }
}

위와 같이 클래스가 정의 되어 있다면 우리는
int Car c = new Car(); 이런식으로 객체를 만들었다
근데 이 때 생성자를 사용한다면
int Car c = new Car(10); 이렇게 객체를 만든다면
speed 객체의 인스턴스 필드 speed가 10으로 초기화 된다
인스턴스 초기화 메서드이다


생성자의 조건

  1. 생성자의 이름은 클래스의 이름과 같아야 한다.
  2. 생성자는 리턴이 없다

위 코드 또한 생성자의 조건과 모두 일치하는 것을 볼 수 있다

기본 생성자

  • 모든 클래스에는 생성자가 정의되어 있어야한다

"엥? 그동안 클래스에 생성자 안만들어도 오류 안나던데요?"
=> 그 이유는 기본 생성자를 컴파일러가 제공하기 때문이다

class Car{
	int speed; // 인스턴스 변수
    void start(){ //인스턴스 메서드
    }
    // Car(){} 가 기본생성자로 숨어있다
}

유의사항

단, 컴파일러가 기본생성자를 추가해주는 경우는 클래스 내에 생성자가 하나도 없을 때다
만약 클래스 내에 생성자가 하나라도 있다면 에러가 발생한다
ex)

class Car{
    Car(int x){
    }
}

위 코드에서 Car c = new Car();를 한다면
car()로 초기화하는 생성자가 없어서 에러가 발생한다(기본 생성자 추가 x)


생성자 this()

생성자에서 다른 생성자를 호출할 때 사용
다른생성자 호출 시 첫 줄에서만 사용이 가능하다
코드의 중복을 제거할 때 주로 사용

class Car(){
	String color;
    int speed;
    
    Car(){ 
    	this("노랑", 10); // 생성자 this() 
        // Car("노랑", 10); 과 같다
        // 같은 클래스일 땐 this()로 사용
    }
    Car(String color, int speed){
    	this.color = color;
        this.speed = speed; // 참조변수 this
    }
}

참조변수 this

인스턴스 자신을 가리키는 참조변수(인스턴스의 주소가 저장)
모든 인스턴스 메서드에 지역변수로 숨어있다 (선언을 안해도 사용할 수 있음)
인스턴스 메서드에서 사용 가능 (생성자 포함)
지역변수와 인스턴스 변수를 구분하기 위해 사용

class Car(){
	String color; // 인스턴스 변수
    int speed;
	Car(String color, int speed){ // 매개변수 - 지역변수
    		this.color = color;
        	this.speed = speed; // 참조변수 this
    	}
}

위와 같이 같은 변수의이름이지만
this.color = 인스턴스 변수 즉 필드의 변수를 의미하고
color = 매개변수로 받은 지역변수를 의미한다 구분하기 위한 용도!!


후기

this, this()의 차이를 완벽히 익혔다
this()는 사실 사용할 일이 많이 없었어서 사용 안했지만 이번에 어떻게 사용하는지 확실히 익힐 수 있는 시간이 되었다
생성자의 개념을 처음 접하는 사람은 이해가 어려울 수 있다
이는 아직 익숙하지 않은 것일 뿐이기 때문에 여러번 보다보면 익혀질 것이다!

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글