본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Backend.DevLog/JAVA

16. Java - this, 객체간의 협력

by 케리's 2022. 6. 30.

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();
		
	}

}

댓글