this가 하는 일
- 인스턴스 자신의 메모리를 가리킴
- 생성자에서 또 다른 생성자를 호출 할때 사용
- 자신의 주소(참조값)을 반환 함
생성된 인스턴스 메모리의 주소를 가짐
- 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드
public void setYear(int year)
{
this.year = year;
}
생성자에서 다른 생성자를 호출 하는 this
- 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음
- 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음
public class Person {
String name;
int age;
public Person() {
//생성자에서 다른생성자 부름 , 이걸 호출하면 아래 this.name, this.age가 호출됨, 가장 위에 있어야함
this("이름없음", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void showPerson(){
System.out.println(name + age);
}
public static void main(String[] args) {
Person person = new Person();
person.showPerson();
}
}
자신의 주소를 반환하는 this
public class Person {
String name;
int age;
public Person() {
this("이름없음", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person getPerson() {
// 자기자신의 주소 반환
return this;
}
public static void main(String[] args)
{
Person p = new Person();
p.name = "James";
p.age = 37;
Person p2 = p.getPerson();
System.out.println(p);
System.out.println(p2);
}
}
객체 간의 협력 (collabration)
객체 지향 프로그래밍에서의 협력
- 객체 지향 프로그램에서 객체 간에는 협력이 이루어짐
- 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현되어야 함
- 매개 변수로 객체가 전달되는 경우가 발생
Bus.java
package ch14;
public class Bus {
int busNumber;
int passengerCount;
int money;
public Bus(int busNumber) {
this.busNumber = busNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showBusinfo() {
System.out.println(busNumber + "번 버스의 승객은 " + passengerCount + "명 이고, 수입은 " + money + "원 입니다");
}
}
Subway.java
package ch14;
public class Subway {
int lineNumber;
int passengerCount;
int money;
public Subway(int lineNumber) {
this.lineNumber = lineNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showSubwayInfo() {
System.out.println(lineNumber + "번 지하철의 승객은 " + passengerCount + "명 이고, 수입은 " + money + "원 입니다");
}
}
Student.java
package ch14;
public class Student {
String studentName;
int money;
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
public void takeBus(Bus bus) {
bus.take(1000);
this.money -= 1000;
}
public void takeSubway(Subway subway) {
subway.take(1200);
this.money -= 1200;
}
public void showInfo() {
System.out.println(studentName +"님의 남은 돈은 " + money + "원 입니다");
}
}
TakeTransTest.java
package ch14;
public class TakeTransTest {
public static void main(String[] args) {
Student studentJ = new Student("James",5000);
Student studentT = new Student("Tomas",10000);
Bus bus100 = new Bus(100);
Bus bus500 = new Bus(500);
studentJ.takeBus(bus100);
Subway greenSubway = new Subway(2);
studentT.takeSubway(greenSubway);
studentJ.showInfo();
studentT.showInfo();
bus100.showBusinfo();
greenSubway.showSubwayInfo();
}
}
'|Backend.DevLog > JAVA' 카테고리의 다른 글
18. Java - array (배열), 2차원배열, ArrayList (0) | 2022.06.30 |
---|---|
17. Java - static변수, static 메서드 , 싱글톤패턴 (0) | 2022.06.30 |
15. Java - 접근 제어 지시자, 정보은닉, 캡슐화 (0) | 2022.06.29 |
14. Java - 참조자료형 변수 (0) | 2022.06.29 |
13. Java - 생성자(constructor), 오버로딩 (0) | 2022.06.29 |
댓글