객체 간의 협력 (collabration), 예제

kangsun·2023년 3월 19일
0

Java

목록 보기
41/44
  • 객체의 정체성이 혼란스러우면 안된다.
  • 그 객체가 하는 일은 그 객체의 이름에 맞는 유일한 일들을 하는 것이 옳다.



객체 지향 프로그래밍에서의 협력


  • 객체 지향 프로그램에서 객체 간에는 협력이 이루어진다.
  • 협력을 위해서는 필요한 메세지를 전송하고 이를 처리하는 기능이 구현되어야 한다.
  • 매개 변수로 객체가 전달되는 경우가 발생한다.

  • 여기서 객체는 [학생, 버스, 지하철] 이다.

  • 객체가 혼자 운영되는 것이 아니라 그 객체가 다른 객체와 유기적으로 연동이 되는 것. (협력)
  • 서로 정보를 주고받는다. (= 메세지가 전송된다. )
  • 매개변수로 객체 자체가 전달되는 경우도 있다.

  • 버스를 탄다는 행위에 다양한 일이 발생한다.
    • 버스를 타게되면 학생이 가진 돈은 적어진다.
    • 버스는 수입이 늘어난다.
  • 커피를 구매한다고 가정했을 때
    • 나는 커피를 구매하기위해 돈을 지불
    • 점원은 커피를 제공

=> 이런식으로 객체 간 (버스 - 나 / 점원 - 나) 인터렉션이 일어나는 것이 객체 간의 협력이다.

  • 프로그래밍은 이처럼 실생활을 잘 반영하고 있다. 우리는 모두 객체고 하나의 인스턴스이며 각 인스턴스들이 서로 협력을 하면서 속성 값이 변하는 일들이 일어난다.



학생 객체


  1. 학생 이름 / 학생이 가진 돈
  2. 생성자 초기화
  3. 버스를 탈때 일어나는 일 (버스비 지불, 학생 돈 차감)
  4. 지하철을 탈 때 일어나는 일 (지하철비 지불, 학생 돈 차감)
package ch14;

public class Student {

	String studentName;
	int money;
	
	//생성자(초기화)
	public Student (String studentName, int money) {
		this.studentName = studentName;
		this.money = money;
	}
	
	//버스를 타는 행위, (어떤 버스를 탔는지가 매개변수로 넘어온다.)
	// Bus 객체와 take라는 메서드는 아직 만들지 않음.
	public void takeBus(Bus bus) {
		//버스를 타면 1000원 지불
		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 + "원 입니다.");
	}
	
}

객체의 초기화 생성자를 만들 때

인스턴스를 생성할 때 만들 값을 생각하면 됨.
Student student1 = new Student("이름", 가진돈);
인스턴스를 하나 생성할 때 학생의 이름과 돈이 필요함.
그럼 생성자도 이름과 돈을 초기화시켜주면 된다.
"학생" 객체를 계속 만들어내기위해 필요한 값.
핸드폰이라면? 핸드폰 종류, 가격 이 있겠지 ??



버스 객체


  1. 버스 번호 / 승객수 카운트 / 요금
  2. 버스 번호만 초기화 시켜준다
    - 버스 인스턴스를 만들 때 버스 번호로 구분이되고 승객수와 요금은 0에서 계속 늘어나기 때문에 초기화시켜주지 않아도 됨.
  3. 버스를 탔을 때 (요금이 추가되고, 승객수가 오른다)
package ch14;

public class Bus {
	
	int busNumber;
	int passengerCount;
	int money;
	
	// 승객수와 금액은 초기값 없어도 됨 (한명씩 탈 때마다 늘어나기때문)
	public Bus(int busNumber) {
		this.busNumber = busNumber;
	}
	
	// 매개변수로 돈이 들어오면 take 함수가 실행됨
	public void take(int money) {
		// 돈이 추가되고
		this.money += money;
		// 승객이 1명씩 늘어난다
		passengerCount++;
	}
	
	public void showBusinfo() {
		System.out.println(busNumber + "번의 승객 수는 " + passengerCount + "이고, 수입은 " + money + "원 입니다.");
	}

}




지하철 객체


package ch14;

public class Subway {
	
	int lineNumber;
	int passengerCount;
	int money;
	
	// 승객수와 금액은 초기값 없어도 됨 (한명씩 탈 때마다 늘어나기때문)
	public Subway(int lineNumber) {
		this.lineNumber = lineNumber;
	}
	
	// 매개변수로 돈이 들어오면 take 함수가 실행됨
	public void take(int money) {
		// 돈이 추가되고
		this.money += money;
		// 승객이 1명씩 늘어난다
		passengerCount++;
	}
	
	public void showSubwayinfo() {
		System.out.println(lineNumber + "번의 승객 수는 " + passengerCount + "이고, 수입은 " + money + "원 입니다.");
	}

}




main()

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

}
profile
코딩 공부 💻

0개의 댓글