this란
우리가 생성자나 메소드를 생성할 때 매개변수를 받을 수 있다. 매개 변수를 받아 멤버 변수에 값을 저장하려고 할 때 종종 매개 변수와 멤버 변수의 이름이 일치하는 경우가 발생한다. 이때 매개 변수와 멤버 변수를 구분 하기 위해 멤버 변수의 앞에 this를 붙여 둘을 구분하게 된다.
this 사용 예제
class Car{
private String modelName;
private String color;
private int modelYear;
private int maxSpeed;
private int currentSpped;
Car(String modelName, int modelYear, String color, int max){
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
maxSpeed = max;
this.currentSpped = 0;
}
}
Car 클래스에서 만들어진 Car 생성자가 modelName과 modelYear, color, max의 매개변수를 받고 있다.
하지만 modelName, modelYear, color는 이미 Car 클래스에서 사용하는 변수 명 이기때문에 매개 변수의 이름과 겹치기 때문에 this.를 붙여 구분을 해준다.
max도 매개 변수로 받고 있지만 Car 클래스에서는 maxSpeed 변수를 통해 max 매개 변수를 받고 있기 때문에 따로 this를 붙여줄 필요가 없다.
이러한 this참조변수를 사용할 수 있는 영역은 클래스에서 만들어진 객체 메소드 뿐이며 클래스 메소드에서는 사용할 수 없다.
this()란
생성자 내부에서만 사용하는 것으로 같은 클래스 내에 다른 매개 변수를 가지는 생성자가 중복으로 생성 되었을 때, 다른 생성자를 호출하기 위해 사용한다.
즉, this()메소드에서 인수를 전달하면, 생성자 중에서 매개변수의 개수와 타입이 일치하는 다른 생성자를 찾아서 호출하여 사용한다.
단, 자기 자신을 호출 할 수 없고 반드시 첫번째 문장에 와야 한다.
this() 사용 예제1
class Car1{
private String modelName;
private String color;
private int modelYear;
private int maxSpeed;
private int currentSpped;
Car1(){
//this()를 사용하기 위해서는 여기에 내용이 올 수 없다.
this("소나타", 2012, "검정", 160); // <-- 첫번째 줄에서만 다른 생성자 호출 가능하기 때문.
}
Car1(String modelName, int modelYear, String color, int max){
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
maxSpeed = max;
this.currentSpped = 0;
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Test65 {
public static void main(String[] args) {
String Car1Info = new Car1().getModel();
System.out.println(Car1Info);
}
}
Car1Info에 아무런 매개 변수도 받지 않은 Car1의 정보를 넣어 출력했는데 '2012년식 소나타 검정' 이라는 출력 결과가 나오는 것을 확인할 수 있다.
이는 Car1() 생성자가 this()를 통해 매개변수를 받고 있는 또 다른 생성자를 호출하여 값을 넣어 출력했기 때문이다.
this() 사용 예제2
class MyDate{
private int year;
private int month;
private int day;
//객체 생성시 객체 변수 year, month, day의 값을 저장 할 생성자
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
//객체 생성시 객체 변수 year, month의 값을 저장 할 생성자
public MyDate(int year, int month) {
//다른 생성자 호출
this(year, month, 1);
}
//객체 생성시 객체 변수 year의 값을 저장 할 생성자
public MyDate(int year) {
//다른 생성자 호출
this(year, 1, 1);
}
//객체 생성시 아무런 매개 변수도 받지 않는 생성자.
public MyDate() {
// 다른 생성자 호출
this(2016, 1, 1);
}
//위 객체 변수의 값들을 출력하는 기능의 메소드
public void print() {
System.out.println(this.year + "/" + month + "/" + this.day);
}
}
public class Test66 {
public static void main(String[] args) {
//1. 객체 생성과 동시에 1988, 8, 30을 생성자 호출시 매개변수로 전달
// 생성한 객체 내부의 객체변수들에 각각 저장
MyDate d = new MyDate(1988, 8, 30);
d.print();
//2. 객체 생성과 동시에 1988, 8을 생성자 호출시 매개변수로 전달해
// 생성한 객체 내부의 객체변수들에 각각 저장
MyDate d2 = new MyDate(1988, 8);
d2.print();
//2. 객체 생성과 동시에 1988을 생성자 호출시 매개변수로 전달해
// 생성한 객체 내부의 객체변수들에 각각 저장
MyDate d3 = new MyDate(1988);
d3.print();
//2. 기본 생성자 생성
// 생성한 객체 내부의 객체변수들에 각각 저장
MyDate d4 = new MyDate();
d4.print();
}
}
'프로그래밍 > Java' 카테고리의 다른 글
[Java]import (0) | 2021.03.30 |
---|---|
[Java]패키지 (0) | 2021.03.30 |
[Java]메소드 오버로딩 (0) | 2021.03.26 |
[Java]생성자 (0) | 2021.03.24 |
[Java]객체 배열 (0) | 2021.03.19 |