위와 같이 학생, 버스, 택시 객체가 존재할 때 각 객체들은 메서드를 통해서 상호작용이 가능하다.
- 학생(객체)
- 멤버변수 : 학생이름, 소지금액
- 메서드 : 버스를 탄다, 택시를 탄다, 소지금액을 보여준다, ...
- 버스(객체)
- 멤버변수 : 버스번호, 보유금액, 승객수, ...
- 메서드 : 사람을 태운다, 보유금액을 보여준다, ...
- 지하철(객체)
- 멤버변수 : 지하철 호선, 승객수, 보유금액, ...
- 메서드 : 사람을 태운다, 보유금액을 보여준다, ...
학생 <-> 버스, 지하철 객체 생성 및 협력
- 각 클래스들은 같은 package 내에 존재한다고 가정하고 형성
- 학생
public class Student {
String studentName;
int money; //소지금액
//생성자
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
// 버스 탑승
public void takeBus(Bus bus) {
bus.takepass(1000); // Bus 클래스에 takepass라는 메소드 필요
money-=1000;
}
// 지하철 탑승
public void takeSubway(Subway subway) {
subway.takepass(1500); // Subway 클래스에 takepass라는 메소드 필요
money-=1500;
}
// 소지금액 보여줌
public void showMoney() {
System.out.println(student + "님의 남은 돈은 " + money + "원 입니다.")
}
}
- 버스
public class Bus {
int busNumber;
int money;
int passengerCount;
//생성자
public Bus(int busNumber) {
this.busNumber = busNumber;
}
// 지불 금액을 받아서 승객수+1, 받은 금액+
public void takepass(int money) {
passengerCount++;
this.money += money;
}
// 보유 금액 보여줌
public void showMoney(){
System.out.println(busNumber + "번 버스의 승객수는 " + passengerCount + "명이고, "
+ "수입은 " + money + "원 입니다.");
}
}
- 지하철
public class Subway {
int subwayNumber;
int money;
int passengerCount;
//생성자
public Subway(int subwayNumber) {
this.subwayNumber = subwayNumber;
}
// 지불 금액을 받아서 승객수+1, 받은 금액+
public void takepass(int money) {
passengerCount++;
this.money += money;
}
// 보유 금액 보여줌
public void showMoney(){
System.out.println(subwayNumber + "라인의 승객수는 " + passengerCount + "명이고, "
+ "수입은 " + money + "원 입니다.");
}
}
또다른 방법 - 상속
위의 구성방법은 학생/버스/지하철 의 클래스를 각각 독자적으로 형성하여 상호작용을 한다.
하지만 Bus와 Subway의 클래스에서 takepass와 showMoney 메서드는 속한 클래스만 다를뿐 같은 기능을 수행한다.
위의 그림과 같이 상위 클래스 Trans를 형성하여 내부에 takepass/showInfo 메서드를 형성하고 이를 Bus와 Subway가 상속받아 사용하는 방식으로 간결화가 가능하다.
이 경우에는 Trans와 Student가 협업하여 기능을 수행하게 된다.
상속에 관한 상세한 내용은 후에 다른 글로 정리할 예정
'JAVA > 언어입문' 카테고리의 다른 글
자바(JAVA) - static 변수 / static 메서드 (0) | 2022.03.25 |
---|---|
자바(JAVA) - 예약어 this (0) | 2022.03.16 |
자바(JAVA) - 접근제어자(private/default/protected/public) (0) | 2022.03.15 |
자바(JAVA) - 참조자료형(Reference Data Type) (0) | 2022.03.14 |
자바(JAVA) - 생성자(constructor) (0) | 2022.03.09 |
댓글