본문 바로가기

Java

생성자와 메서드를 활용해 class 사이 상호작용을 해본다

Bus, Subway

Student 클래스를 각각 작성했다.

 

Student가 대중교통을 이용하면 잔고가 줄고

대중교통은 잔고가 늘어나는 프로그램을 만들어본다.

 

먼저 Bus 클래스 설계

 

클래스를 설계할때는 속성 / 생성자 / 메서드 순으로 하면 된다.

package ch10;
    // 클래스 설계 측
public class Bus {

    int busNo; int busCount; int busincome;

    // 생성자
    public Bus(int bno) {
        busNo = bno;
        // 객체 생성시 가장 먼저 실행
    }

        // 메서드 - 승객을 태워보자
        public void take(int pay) {
            busincome += pay;
            busCount ++;
        }

        public void ShowInfo() {
            System.out.println("===== 상태창 =====");
            System.out.println("버스 번호: " + busNo);
            System.out.println("버스 승객수: " + busCount);
            System.out.println("버스 총수익: " + busincome);
        }

} // end of class

 

Subway 클래스 설계

package ch10;
public class Subway {

    int subNo;
    int subCount;
    int subIncome;

    public Subway(int sno) {
        subNo = sno;
    }

    // 승객을 태우다.
    public void take(int pay) {
        subIncome += pay;
        subCount ++;
    }

    // 상태창
    public void ShowInfo() {
        System.out.println("===== 상태창 =====");
        System.out.println("지하철 번호: " + subNo);
        System.out.println("지하철 승객수: " + subCount);
        System.out.println("지하철 총수익: " + subIncome);
    }
} // end of class

 

Student 클래스 설계

takeBus 메서드는 Bus 클래스에서 take 메서드를 불러오는 역할이다...

package ch10;
// 클래스 설계 측
public class Student {

    String name;
    int money;

    // 매개변수 2개를 받는 생성자를 만들어보자
    public Student(String snm, int smn) {
        name = snm;
        money = smn;
    }

    // 학생이 버스를 탄다
    public void takeBus(Bus bus) {

        bus.take(1000);
        // 버스에 1000원을 내고 내 멤버변수 money에 -1000원
        money -= 1000;
    }

    // 학생이 지하철을 탄다

    // 학생의 상태창

    public void ShowInfo() {
        System.out.println("===== 상태창 =====");
        System.out.println("학생이름: " + name);
        System.out.println("학생소지금: " + money);
    }
} // end of class

 

위 클래스들을 활용해 버스이용 프로그램을 만들어봤다.

package ch10;
public class GoingToSchool {
    // main
    public static void main(String[] args) {
        Bus bus1 = new Bus(133);
        Bus bus2 = new Bus(1004);

        Subway sub1 = new Subway(3);
        Student stu1 = new Student("홍길동", 10000);
        Student stu2 = new Student("티모", 5000);

        stu1.ShowInfo();

        // 학생1이 버스를 탔다.
        stu1.takeBus(bus1); // bus1의 실제값은 주소이다.

        stu1.ShowInfo(); bus1.ShowInfo();

        // 학생2가 버스를 탔다.
        stu2.takeBus(bus1);

        stu2.ShowInfo(); bus1.ShowInfo();

        /*
        기본 데이터 타입 / 참조 데이터 타입

        참조타입은 대문자로 선언된다.
         */

    } // end of main
} // end of class

 

대중교통 이용 예제2

package ch10;
public class GoingToSchool2 {
    //main
    public static void main(String[] args) {

        //버스 객체를 3개 생성
        Bus bus1 = new Bus(133);
        Bus bus2 = new Bus(179);
        Bus bus3 = new Bus(1004);

        //학생 개체를 3개 생성
        Student stu1 = new Student("홍길동", 10000);
        Student stu2 = new Student("장길산", 5000);
        Student stu3 = new Student("임꺽정", 2500);

        //학생이 버스를 타는 행위를 구현
        stu1.takeBus(bus1); stu2.takeBus(bus1); stu3.takeBus(bus2);

        //버스 상태창 출력
        bus1.ShowInfo(); bus2.ShowInfo(); bus3.ShowInfo();
        stu1.ShowInfo(); stu2.ShowInfo(); stu3.ShowInfo();

    }//end of main
}//end of class