This 예약어
자신의 메모리를 가리키는 this
package thisEx;
//자신의 메모리를 가리키는 this
class BirthDay{
int day;
int month;
int year;
//태어난 연도를 지정하는 메서드
public void setYear(int year){
this.year = year; //b.Day.year = year;과 같음
}
public void printThis() {
System.out.println(this);
}
}
public class ThisEx {
public static void main(String[] args) {
BirthDay bDay = new BirthDay();
bDay.setYear(2000);
System.out.println(bDay);
bDay.printThis();
}
}
bDay.printThis()메서드를 호출하여 출력한 this 값이 참조 변수 bDay를 출력한 값과 같음.
즉, 클래스 코드에서 사용하는 this는 생성된 인스턴스 자신을 가리키는 역할을 함
this.year = year; 문장으로 참조하면 동적 메모리에 생성된 인스턴스의 year 변수 위치를 가리키고 그 위치에 매개변수 값을 넣어주는 것
생성자에서 다른 생성자를 호출하는 this
this를 사용해 클래스의 생성자에서 다른 생성자를 호출할 수 있음
package thisEx;
class Person{
String name;
int age;
Person(){
this("이름 없음",1); this를 사용해 Person(String, int) 생성자 호출
}
Person(String name, int age){
this.name = name;
this.age = age;
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person noName = new Person();
System.out.println(noName.name);
System.out.println(noName.age);
}
}
this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드를 넣을 수 없음. 만약 다른 코드를 넣으면 오류메세지가 나타남
생성자는 클래스가 생성될 때 호출되므로 클래스 생성이 완료되지 않은 시점에 다른 코드가 있다면 오류가 발생할 수 있음
즉, 디폴트 생성자에서 생성이 완료되는 것이 아니라 this를 사용해 다른 생성자를 호출하므로, 이때 this를 활용한 문장이 가장 먼저 와야함.
자신의 주소를 반환하는 this
생성된 클래스 자신의 주소값을 반환할 수 있음. 인스턴스 주소 값을 반환할 때는 this를 사용하고,
반환형을 클래스 자료형을 사용
package thisEx;
class Person{
String name;
int age;
Person(){
this("이름 없음",1);
}
Person(String name, int age){
this.name = name;
this.age = age;
}
//반환형은 클래스형
Person returnItSelf() {
return this; //this 반환
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person noName = new Person();
System.out.println(noName.name);
System.out.println(noName.age);
Person p = noName.returnItSelf(); //this 값을 클래스 변수에 대입
System.out.println(p); //noName.returnItSelf()의 반환 값 출력
System.out.println(noName); //참조 변수 출력
}
}
this를 반환하는 메서드를 사용할 일이 흔하지 않지만, 클래스 자료형과 상관없이 클래스 내에서 this를 사용하면 자신의 주소 값을 반환할 수 있음
객체 간 협력
//231206
package test6_1;
class Bus{
int busNumber;
int passengerCount;
int money;
//버스 번호를 매개변수로 받는 생성자
public Bus(int busNumber) {
this.busNumber = busNumber;
}
//승객이 버스에 탄 경우 버스 요금을 지불하는 메서드 → 버스 수입 증가
public void take(int busMoney) {
this.money += busMoney;//지불 받은 요금을 가지고 있는 busMoney 매개변수 값을 멤버 변수 this.money에 저장
}
public void show() {
System.out.println("버스번호 : " + this.busNumber + ", 승객이 지불한 요금 : " + this.money);
}
}
class Subway{
int lineNumber;
int passengerCount;
int money;
//지하철 노선을 매개변수로 받는 생성자
public Subway(int lineNumber) {
this.lineNumber = lineNumber;
}
public void take(int subMoney) {
this.money += subMoney;
}
public void show1() {
System.out.println("지하철 라인 : " + this.lineNumber + ", 승객이 지불한 요금 : " + this.money);
}
}
class Student{
String studentName;
int money;
//객체 생성 시 이름과 가진 돈을 곡 넣어주지 않으면 객체가 생성되지 않음.
//이름과 가진 돈을 매개변수로 받는 생성자
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
//학생이 버스를 타면 3100원을 지불하는 기능을 구현하는 메서드. 학생 -3100, 버스 수익 +3100
public void takeBus(Bus bus) //Bus 클래스 객체
{
this.money -= 3100; //Student 클래스의 멤버 변수 money: 학생이 가지고 있는 돈에서 감소
}
//학생이 지하철을 타면 3000원이 지불하는 기능을 구현하는 매서드. 학생 -3000, 지하철 수익 +3000
public void takeSubway(Subway subway) //Subway 클래스 객체
{
this.money -= 3000; //Student 클래스의 멤버 변수 money;
}
public void showInfo() {
System.out.println(studentName + "의 남은 돈 : " + money);
}
}
public class takeTrans {
public static void main(String[] args) {
Bus bus100 = new Bus(100); //버스 객체 생성
bus100.show();
bus100.take(3100);//버스 요금 메서드
bus100.show();
Subway subway1 = new Subway(1);//지하철 객체 생성
subway1.show1();
subway1.take(3000); //지하철 요금 메서드
subway1.show1();
Student James = new Student("James",100000); //학생 객체 생성
James.showInfo();
bus100.take(3100);
bus100.show();
subway1.take(3000);
subway1.show1();
James.takeBus(bus100); //takeBus메서드에 매개변수는 객체형. Bus 클래스로 생성한 객체만 매개변수로 넘겨 줄 수 있음
James.showInfo();
James.takeSubway(subway1); //takeSubway 메서드에 매개변수는 객체형. Subway 클래스로 생성한 객체만 매개변수로 넘겨 줄 수 있음
James.showInfo();
}
}
'KDT > Java' 카테고리의 다른 글
231211 Java (0) | 2023.12.11 |
---|---|
231207 Java (0) | 2023.12.07 |
231204 Java (0) | 2023.12.04 |
231130 Java (0) | 2023.11.30 |
231129 Java (0) | 2023.11.29 |