모든지 기록하자!

[Java] 객체간의 협력(대중교통 이용) 본문

Java

[Java] 객체간의 협력(대중교통 이용)

홍크 2021. 5. 11. 23:47
728x90

학생이 버스나 지하철을 이용하는 상황을 객체 지향으로 간단히 프로그래밍 하자

 

 

학생이 대중교통을 이용하게 되면 버스의 수입이 증가한다.(학생의 소지금 차감)

버스(지하철)는 수입이 증가하고 승객수가 증가한다.  

 

 

public class Student {

	String studentName; //학생 이름
	int grade; //학년
	int money; //소지금
	
	public Student(String studentName, int money) { //학생의 이름과 소지금을 매개변수로 하는 생성자 
		this.studentName = studentName;
		this.money = money;
        //this.money는 맴버변수 money는 지역변수이다.
	}
	
	public void takeBus(Bus bus) { //버스의 정보를 매개변수로 받는 Method 
		bus.take(1000); // 버스를 이용하면 요금 1000원 지불
		money -= 1000; // 버스를 이용하면 소지금 -1000원
		
	}
	public void takeSubway(Subway subway) { //지하철의 정보를 매개변수로 받는 Method
		subway.take(1200);
		money -= 1200; // 지하철을 이용하면 소지금 -1200원
		
	}
	
	public void showInfo() { // 학생의 정보를 출력하는 생성자
		System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
	}
}

 

	
	public void takeBus(Bus bus) { //버스의 정보를 매개변수로 받는 Method 
		bus.take(1000); // 버스를 이용하면 요금 1000원 지불
		money -= 1000; // 버스를 이용하면 소지금 -1000원
		
	}

이번 예제의 핵심은 이 부분이다.(객체의 협업이 일어나는 부분)

이 부분은 생성된 인스턴스가 매개변수로 들어와야 하며 
버스(지하철)의 객체를 받아 Method를 호출하고 Student클래스에 영향을 준다. 

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++; // 승객 수 1증가
	}
	
	public void showInfo() { // 버스의 정보를 출력하는 Method
		System.out.println("버스 " + busNumber + "번의 승객은" +passengerCount + 
				"명이고 , 수입은 " + money + "원 입니다.");
		
	}
}

 

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++; // 승객수 1증가
 	}
	
	public void showInfo() { // 지하철의 정보를 출력하는 Method
		System.out.println("지하철 " + lineNumber + "호선의 승객은" +passengerCount + 
				"명이고 , 수입은 " + money + "원 입니다.");
		
	}
}

 

public class TakeTrans {

	public static void main(String[] args) {

		Student j = new Student("James", 5000); // 이름이 James고 소지금이 5000원인 학생 생성
		Student t = new Student("Tomas", 10000); // 이름이 Tomas 소지금이 10000원인 학생 생성
		
		Bus bus100 = new Bus(100); // 100번 버스 생성
		j.takeBus(bus100); // 생성된 버스가 매개변수로 들어가 자신의 Method를 .
		                   // 호출하여 승객을증가 시키고 수입이 늘어난다
        j.showInfo(); // 학생 정보 출력          
		bus100.showInfo(); // 버스 정보 출력
 		
		Subway subwayGreen = new Subway(2); // 2호선 지하철 생성
		t.takeSubway(subwayGreen); 
		t.showInfo(); // 학생 정보 출력
		subwayGreen.showInfo(); // 지하철 정보 출력
	}

}

 

출력 결과

 

위와 같은 예제는 상속을 사용하면 좀 더 간결해진다.

이후에 상속을 이용해 다시 코딩해보자

 

 

 

728x90
Comments