"Boldness has genius, power, and magic in it." - Johann Wolfgang von Goethe

JAVA_SPRING

[JAVA] 객체 지향 프로그래밍 실습 예제 -Take

Toproot 2022. 10. 4. 22:09
728x90
728x90

iamge

학습 내용

  • 객체간 협력에 대한 이해하기
  • 객체 간 상호작용하는 간단한 실습 예제

🚎 객체 지향 프로그래밍에서의 협력(Collaboration)

객체 지향 프로그래밍을 하는 이유라고도 할 수 있는 객체 간 협력은,
각자 고유의 역할을 하는 객체 간에 필요한 메세지를 주고 받고 이를 처리하는 기능이 구현 되어 있는 것을 의미합니다.
예를 들어 학생이 버스를 탈 때, 학생과 버스는 각자 존재하는 객체이고,
버스를 타는 행위는 이 두 객체간의 협력을 요구합니다.
이때 매개변수로 객체가 전달되는 경우도 발생합니다.

📌 교통수단을 이용하는 학생 예제

학생이 버스, 지하철, 택시를 이용하는 미니 객체 지향 프로그래밍을 실습합니다.
학생이라는 객체와 탈것들 각각의 객체가 있고,
take() 라는 행위 메서드를 통해 요금을 주고받는 상호작용이 발생합니다.

Student

학생 클래스는 생성 될때, 이름과 보유한 현금잔액을 생성자로 받습니다.
그리고 3가지 탈것에 대한 take 메서드가 있고,
현재 잔액을 알려주는 showInfo() 메서드가 있습니다.

package unit13_객체협력;

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.take(1000);
        this.money -= 1000;
    }

    public void takeSubway(Subway subway) {
        subway.take(1200);
        this.money -= 1200;
    }

    public void takeTaxi(Taxi taxi) {
        taxi.take(10000);
        this.money -= 10000;
    }

    public void showInfo() {
        System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
    }
}

BUS

BUS는 탈것 중 하나로, 생성자로 버스 넘버를 받습니다.
학생 클래스에서 학생이 버스를 탑승 (takeBus) 하게 되면
받은 요금이 올라가고 탑승한 승객 수가 증가합니다.
showBusInfo() 메서드로 승객수와 수입을 출력합니다.

package unit13_객체협력;

public class Bus {

    int busNumber;
    int passengerCount;
    int moeny;

    public Bus(int busNumber) {
        this.busNumber = busNumber;
    }

    public void take(int money) {
        this.moeny += money;
        passengerCount++;
    }

    public void showBusInfo() {
        System.out.println(busNumber + "번의 승객 수는 " + passengerCount + "명 이고, 수입은 " + moeny + "원 입니다.");
    }
}

SUBWAY

SUBWAY도 BUS와 마찬가지로, 생성될 때 지하철 라인을 받습니다.
그리고 학생 클래스에서 (takeSubway) 하게 되면 받은 요금이 증가하고 승객수가 증가합니다.
마찬가지로 showSubwayInfo()를 통해 승객수와 수입을 출력합니다.

package unit13_객체협력;

public class Subway {
    int lineNumber;
    int passengerCount;
    int moeny;

    public Subway(int lineNumber) {
        this.lineNumber = lineNumber;
    }

    public void take(int money) {
        this.moeny += money;
        passengerCount++;
    }

    public void showSubwayInfo() {
        System.out.println(lineNumber + "번의 승객 수는 " + passengerCount + "명 이고, 수입은 " + moeny + "원 입니다.");
    }
}

TAXI

TAXI도 생성 될때, 택시 회사의 이름을 받습니다.
그리고 마찬가지로, take(), showInfo() 메서드가 있습니다.

package unit13_객체협력;

public class Taxi {

    String taxiName;
    int money;

    public Taxi(String taxiName) {
        this.taxiName = taxiName;
    }

    public void take(int money) {
        this.money += money;
    }

    public void showInfo() {
        System.out.println(taxiName + " 수입은 " + money + " 입니다.");
    }

}

TakeTransTest

main() 클래스로 각각의 객체를 생성합니다.
그리고 학생 객체의 take()를 실행하여 객체 간 상호작용이 일어나게 한 후,
showInfo()를 통해 그 결과를 출력합니다.

package unit13_객체협력;

public class TakeTransTest {

    public static void main(String[] args) {
        Student studentJ = new Student("James", 5000);
        Student studentT = new Student("Tomas", 10000);
        Student studentE = new Student("Edward", 20000);

        Bus bus100 = new Bus(100);
        Bus bus500 = new Bus(500);

        studentJ.takeBus(bus100);

        Subway greenSubway = new Subway(2);
        studentT.takeSubway(greenSubway);

        Taxi taxi = new Taxi("잘 나간다 운수");
        studentE.takeTaxi(taxi);

        studentJ.showInfo();
        studentT.showInfo();

        bus100.showBusInfo();
        greenSubway.showBusInfo();

        bus500.showBusInfo();

        studentE.showInfo();
        taxi.showInfo();
    }



}
728x90
728x90