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