14강. 클래스와 객체2(2)

철새·2022년 2월 16일
0
  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 1. 자바의 핵심 - 객체지향 프로그래밍
  • 14강 "클래스와 객체2(2)"
  • 객체 간의 협력

객체 간의 협력

  • 학생이 버스나 지하철을 타는 상황을 객체지향으로 프로그래밍하는 예시
    학생이 버스나 지하철을 가는 상황을 객체지향으로 프로그래밍하는 예시

학생이 버스나 지하철을 타는 상황을 프로그래밍하기 위해서는 클래스가 학생, 버스, 지하철이 필요하다.

public class Student {
	String studentName;
	int grade;
	int money;
	
	public Student(String studentName, int money) {
		this.studentName = studentName;
		this.money = money;
	}
	
	public void takeBus(Bus bus) {
		bus.take(1000);
		money -= 1000;
	}
	public void takeSubway(Subway subway) {
		subway.take(1500);
		money -= 1500;
	}
	public void showInfo() {
		System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
	}
}

학생의 속성은 이름, 학년(해당 상황에 필요한 것은 아님), 가진 돈으로 만들어 주었고, 버스를 타는 행위와 지하철을 타면 가진 돈이 줄어드는 메서드로 만들어 주었다.

public class Bus {
	int busNumber;
	int passengerCount;
	int money;
		
	public Bus(int busNumber) {
		this.busNumber = busNumber;
	}
	public void take(int money) {
		passengerCount++;
		this.money += money;
	}
	public void showInfo() {
		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) {
		passengerCount++;
		this.money += money;
	}
	public void showInfo() {
		System.out.println("지하철 " + lineNumber + "호선의 승객은 " + passengerCount + "명이고, 수입은 " + money +"입니다.");
	}
}

지하철의 속성은 노선 번호, 승객 수, 수입으로 만들어 주었고, 버스와 마찬가지로 탑승하는 경우에 승객과 수입이 증가하는 메서드를 만들어 주었다.

public class TakeTrans {
	public static void main(String[] args) {
		Student james = new Student("James", 5000);
		Student tomas = new Student("Tomes", 10000);
		
		Bus bus100 = new Bus(100);		
		james.takeBus(bus100);
		james.showInfo();
		bus100.showInfo();
		
		Subway subway2 = new Subway(2);
		tomas.takeSubway(subway2);
		tomas.showInfo();
		subway2.showInfo();
	}
}

main 함수에서 실행시킨 후 showInfo()로 확인해본 결과 정상 작동하는 것을 확인할 수 있다.
Test

강의에서 작성한 코드가 깔끔하지 않다고 생각해서 약간 수정해보았습니다.

public class Student {
	String studentName;
	int age;
	int money;
	
	public Student(String studentName, int age, int money) {
		this.studentName = studentName;
		this.age = age;
		this.money = money;
	}
	
	public void takeBus(Bus bus) {
		bus.take(this);
		money -= bus.fare;
		showInfo();
	}
	public void takeSubway(Subway subway) {
		subway.take(this);
		money -= subway.fare;
		showInfo();
	}
	public void showInfo() {
		System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
	}
}

나이마다 요금을 다르게 설정하기 위해 Student 클래스에 나이 변수를 추가하였고, 가진 돈은 그 요금만큼 줄어들도록 코딩하였다.

public class Bus {
	int busNumber;
	int passengerCount;
	int fare;
	int money;
		
	public Bus(int busNumber) {
		this.busNumber = busNumber;
	}
	public void take(Student student) {
		if(student.age < 7) {
			fare = 450;
		}else if(student.age < 19) {
			fare = 720;
		}else {
			fare = 1050;
		}
		passengerCount++;
		money += fare;
		showInfo();
	}
	public void showInfo() {
		System.out.println("버스 " + busNumber + "번의 승객은 " + passengerCount + "명이고, 수입은 " + money +"입니다.");
	}
}
public class Subway {
	int lineNumber;
	int passengerCount;
	int fare = 1500;
	int money;
		
	public Subway(int lineNumber) {
		this.lineNumber = lineNumber;
	}
	public void take(Student student) {
		if(student.age < 7) {
			fare = 450;
		}else if(student.age < 19) {
			fare = 720;
		}else {
			fare = 1250;
		}
		passengerCount++;
		money += fare;
		showInfo();
	}
	public void showInfo() {
		System.out.println("지하철 " + lineNumber + "호선의 승객은 " + passengerCount + "명이고, 수입은 " + money +"입니다.");
	}
}

버스와 지하철의 take() 메서드는 Student의 나이에 따라 요금이 달라지도록 설정하였다.

public class TakeTrans {
	public static void main(String[] args) {
		Student james = new Student("James", 25, 10000);
		Student tomas = new Student("Tomes", 15, 10000);
		Student harry = new Student("Harry", 5, 10000);
		
		Bus bus100 = new Bus(100);		
		james.takeBus(bus100);
		tomas.takeBus(bus100);
		harry.takeBus(bus100);
		
		Subway subway2 = new Subway(2);
		james.takeSubway(subway2);
		tomas.takeSubway(subway2);
		harry.takeSubway(subway2);
	}
}

수정 코드 출력

25살, 15살, 5살의 Student 객체를 만들고 각각 버스와 지하철을 탔을 때 요금이 다르게 줄어드는 것을 확인할 수 있다.

profile
효율성을 추구하며 세상을 떠도는 철새입니다.

0개의 댓글

관련 채용 정보