[Java] 클래스와 객체 - 객체간 협력

나영원·2020년 8월 27일
0

Java_basic

목록 보기
29/60
post-thumbnail

객체 지향 프로그래밍은 객체를 정의하고 협력 한다고 배웠는데 예제를 통해서 객체간 협력이 어떻게 구현되는지 알아보도록 하겠습니다.

예제

다음과 그림과 같이 학생이 버스나 지하철을 탔을 경우 학생이 가진돈과 교통수단의 수입이 어떻게 변화하지는지 구현해보시오.

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+"입니다.");
	}

}
  • 1번 : Bus 클래스를 생성하고 필요한 3가지 멤버 변수를 선언합니다.
  • 2번: busNum을 매개변수로 하는 Bus 클래스의 생성자를 생성합니다.
  • 3번: Student가 bus를 탔을 때 매개변수 income만큼 멤버변수 income을 증가시키면서 passegerCount도 1시키는 take메서드를 작성합니다
  • 4번: busNum의 passegerCount와 incom을 출력하는 busInfo를 작성합니다.
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+"입니다.");
	}
}
  • 1번 : Student 클래스를 생성하고 3가지 멤버 변수를 생성합니다.
  • 2번 : Student 생성자를 생성합니다. 매개변수는 studentName 과 money를 사용합니다
  • 3번 : takeBus메서드를 만들어 학생이 버스를 탔을 때 Bus Class에서 만든 take메서드를 통해 bus의 income에 1000원이 증가하고 passengerCount가 1증가하며 Student에 money 변수에서는 1000원이 빠져나가게 합니다.
  • 4번 : 3번과 같은역할을 Subway클래스를 통해서 하는 takeSubway 메서드를 작성합니다.
  • 5번 : studentName과 money를 출력하는 showInfo메서드를 작성합니다.
  • 3번과 4번 과정이 우리가 알고 싶어한 객체간의 협력이 일어나는 부분으로 Student의 메서드의 매개변수로 Bus가 참조 변수로 들어가 있습니다. 또한 구현문에서 Bus클래스의 메서드인 .take가 사용되어 있어 Student메서드 안에 다른 클래스의 메서드와 멤버 변수가 협력하고 있는 것을 확인할 수 있습니다.
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입니다.
	}
}
  • 1번 : TakeTransTest 클래스를 만들고 Student 인스턴스를 2개 만듭니다.
  • 2번: : Bus의 인스턴스 2개를 만듭니다.
  • 3번: Subway의 인스턴스를 만듭니다.
  • 4번 : Student인스턴스들이 Bus와 Subway를 탔다고 가정하여 각각 takeBus, takeSubway 메서드를 사용합니다.
  • 5번 : showInfo메서드를 사용해 Student 인스턴스들의 현재 남은 money를 출력합니다.
  • 6번 : BusInfo 메서드를 사용해 Bus 인스턴스들의 passengerCount와 Income을 출력합니다.
  • 7번 : Subwayinfo 메서드를 사용해 subwayGreen의 passengerCount와 Income을 출력합니다
  • 테스트의 결과값을 통해 3개의 클래스에 협력이 잘 이루어진 것을 확인 할 수 있었습니다.

추가예제

_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입니다.
  • TakeTransTest 클래스에 위와 같은 코드를 입력하여 작동하는지를 테스트 합니다.
  • 테스트 결과 Taxi 클래스도 Student 클래스와 잘 협력하고 있음을 확인할 수 있습니다.!
profile
배우는 개발 일기

0개의 댓글