객체 지향 프로그래밍은 객체를 정의하고 협력 한다고 배웠는데 예제를 통해서 객체간 협력이 어떻게 구현되는지 알아보도록 하겠습니다.
다음과 그림과 같이 학생이 버스나 지하철을 탔을 경우 학생이 가진돈과 교통수단의 수입이 어떻게 변화하지는지 구현해보시오.
public class Bus {
//1번
int busNum;
int passengerCount;
int income;
//2번
public Bus(int busNum) {
this.busNum=busNum;
}
//3번
public void take(int income) {
this.income += income;
passengerCount++;
}
//4번
public void busInfo() {
System.out.println(busNum+"번 버스의 승객 수는"+passengerCount+"이고 수입은 "+income+"입니다.");
}
}
public class Subway {
int lineNum;
int passengerCount;
int income;
public Subway(int lineNum) {
this.lineNum=lineNum;
}
public void take(int income) {
this.income += income;
passengerCount++;
}
public void subwayInfo() {
System.out.println(lineNum+"번 지하철의 승객 수는"+passengerCount+"이고 수입은 "+income+"입니다.");
}
}
Buts 클래스와 동일한 기능을 하는 Subway 클래스를 생성하여 작성해줍니다.
public class Student {
//1번
String studentName;
int grade;
int money;
//2번
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
//3번
public void takeBus(Bus bus) {
bus.take(1000);
money -= 1000;
}
//4번
public void takeSubway(Subway subway) {
subway.take(1200);
money -= 1200;
}
//5번
public void showInfo() {
System.out.println(studentName + "의 남은 돈은 "+money+"입니다.");
}
}
public class TakeTransTest {
public static void main(String[] args) {
//1번
Student studentJ = new Student("James",5000);
Student studentT = new Student("Tomas",10000);
//2번
Bus bus100 = new Bus(100);
Bus bus500 = new Bus(500);
//3번
Subway subwayGreen = new Subway(2);
//4번
studentJ.takeBus(bus100);
studentT.takeSubway(subwayGreen);
//5번
studentJ.showInfo();//James의 남은 돈은 4000입니다.
studentT.showInfo();//Tomas의 남은 돈은 8800입니다.
//6번
bus100.busInfo();//100번 버스의 승객 수는1이고 수입은 1000입니다.
bus500.busInfo();//500번 버스의 승객 수는0이고 수입은 0입니다.
//7번
subwayGreen.subwayInfo();//2번 지하철의 승객 수는1이고 수입은 1200입니다.
}
}
_Edward가 늦잠을 자서 학교에 택시를 타고 10,000원을 지불한 상황을 추가 코딩해 보시오.
public class Taxi {
int taxiNum;
int passengerCount;
int income;
public Taxi(int taxiNum) {
this.taxiNum=taxiNum;
}
public void take(int income) {
this.income += income;
passengerCount++;
}
public void busInfo() {
System.out.println(taxiNum+"의 승객 수는"+passengerCount+"이고 수입은 "+income+"입니다.");
}
}
Taxi 클래스를 만들고 Bus, Subway 클래스들과 동일한 기능을 하는 코드를 작성합니다
public void takeTaxi(Taxi taxi1) {
taxi1.take(10000);
money -= 10000;
}
Student 클래스에 takeTaxi 메서드를 추가해줍니다.
Student studentE = new Student("Edward", 10000);
Taxi taxi1 = new Taxi(1);
studentE.takeTaxi(taxi1);
studentE.showInfo(); //Edward의 남은 돈은 0입니다.
taxi1.taxiInfo(); //택시1의 승객 수는1이고 수입은 10000입니다.