본문 바로가기
JAVA/언어입문

자바(JAVA) - 객체간 협력

by Sunyoung95 2022. 3. 16.

위와 같이 학생, 버스, 택시 객체가 존재할 때 각 객체들은 메서드를 통해서 상호작용이 가능하다.

  • 학생(객체)
    • 멤버변수 : 학생이름, 소지금액
    • 메서드 : 버스를 탄다, 택시를 탄다, 소지금액을 보여준다, ...
  • 버스(객체)
    • 멤버변수 : 버스번호, 보유금액, 승객수, ...
    • 메서드 : 사람을 태운다, 보유금액을 보여준다, ...
  • 지하철(객체)
    • 멤버변수 : 지하철 호선, 승객수, 보유금액, ...
    • 메서드 : 사람을 태운다, 보유금액을 보여준다, ...

 

학생 <-> 버스, 지하철 객체 생성 및 협력
  • 각 클래스들은 같은 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가 협업하여 기능을 수행하게 된다.

 

상속에 관한 상세한 내용은 후에 다른 글로 정리할 예정

댓글