06-2 객체 간 협력
예제
객체 지향 프로그램의 객체 간 협력이 이루어지는 과정을 학생, 버스, 지하철 세 객체 사이의 협력에 관한 예제를 통해 살펴보겠다.
학생 클래스 구현하기
- 멤버 변수(속성) : 이름 / 학년 / 가진 돈
- 메서드(멤버 함수) : 지하철을 탄다. / 학생의 현재 정보를 보여 준다.

▶ 8행의 생성자는 학생 이름과 해당 학생이 가진 돈을 매개 변수로 받는다.
학생 클래스 하나를 생성하면 학생 이름과 학생이 가진 돈을 초기화한다.
디폴트 생성자를 제공하지 않으므로 8행의 생성자를 호출해야 한다.
▶ takeBus( )와 takeSubway( ) 메서드는 학생이 가진 돈을 해당 교통수단 이용료만큼 차감시킨다.
▶ showInfo( ) 메서드는 학생 정보를 출력해준다.
버스 클래스 / 지하철 클래스 구현하기
- 멤버 변수 : 버스 번호, 승객 수, 버스가 받은 요금 총액
- 메서드 : 승객이 버스에 탄 경우 - 버스 수입 증가 / 승객 수 증가


▶ take( ) 메서드는 승객 한 명이 버스에 탄 경우를 구현한다.
요금을 매개변수로 받고 요금이 들어오면 버스 수입과 승객 수가 증가한다.
▶ Bus(int busNumber) 생성자는 버스 번호를 매개변수로 받아 버스가 생성될 때 버스 번호를 초기화한다.
▶ showInfo( ) 메서드는 버스 번호, 버스를 탄 승객 수, 버스 수입에 관한 정보를 출력한다.
* 지하철 클래스도 버스 클래스와 마찬가지이다.
학생, 버스, 지하철 객체 협력하기

우리가 객체를 클래스로 만들어 구현하면 이렇듯 객체 사이에는 어떤 값을 주고받고 메서드를 호출하는 일이 발생한다.
이 프로그램에서는 학생, 버스, 지하철 객체를 사용했다.
각 객체에 필요한 멤버 변수를 선언하고, 생성자를 정의했다.
객체 사이의 협력 기능도 구현했다.
학생 객체 입장의 '학생이 지하철을 탄다.'와 지하철 객체 입장의 '지하철에 학생이 탄다.' 라는 하나의 사건에 대한 두 객체의 서로 다른 입장을 각 클래스에 메서드로 구현했다.