Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 싱클톤패턴
- 깃 명령어
- SUB Query
- 템플릿
- order by
- 사용자 데이터그램 프로토콜
- IP
- 스프링 모달창
- downcasting
- 오라클 비교연산자
- react
- GROUP BY
- 상속
- oracle 연동
- 다중 모달창
- 리스트 모달창
- spring annotation
- static
- static메서드
- static 예제
- singleton
- Servlet 맵핑
- AOP란?
- 객체협력
- 이클립스 오라클 연동
- 추상 메서드
- Java
- 다운캐스팅
- 형변환
- 모달창 여러개
Archives
- Today
- Total
모든지 기록하자!
[Java] 객체간의 협력(대중교통 이용) 본문
728x90
학생이 버스나 지하철을 이용하는 상황을 객체 지향으로 간단히 프로그래밍 하자
학생이 대중교통을 이용하게 되면 버스의 수입이 증가한다.(학생의 소지금 차감)
버스(지하철)는 수입이 증가하고 승객수가 증가한다.
public class Student {
String studentName; //학생 이름
int grade; //학년
int money; //소지금
public Student(String studentName, int money) { //학생의 이름과 소지금을 매개변수로 하는 생성자
this.studentName = studentName;
this.money = money;
//this.money는 맴버변수 money는 지역변수이다.
}
public void takeBus(Bus bus) { //버스의 정보를 매개변수로 받는 Method
bus.take(1000); // 버스를 이용하면 요금 1000원 지불
money -= 1000; // 버스를 이용하면 소지금 -1000원
}
public void takeSubway(Subway subway) { //지하철의 정보를 매개변수로 받는 Method
subway.take(1200);
money -= 1200; // 지하철을 이용하면 소지금 -1200원
}
public void showInfo() { // 학생의 정보를 출력하는 생성자
System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다.");
}
}
public void takeBus(Bus bus) { //버스의 정보를 매개변수로 받는 Method
bus.take(1000); // 버스를 이용하면 요금 1000원 지불
money -= 1000; // 버스를 이용하면 소지금 -1000원
}
이번 예제의 핵심은 이 부분이다.(객체의 협업이 일어나는 부분)
이 부분은 생성된 인스턴스가 매개변수로 들어와야 하며
버스(지하철)의 객체를 받아 Method를 호출하고 Student클래스에 영향을 준다.
public class Bus {
int busNumber; //버스 번호
int passengerCount; //승객 수
int money; // 버스의 수입
public Bus(int busNumber) { //버스번호를 매개변수로 받는 생성자
this.busNumber = busNumber;
}
public void take(int money) { // 승객을 태울시
this.money += money; // 승객이 지불한 금액으로 버스의 수입증가
passengerCount++; // 승객 수 1증가
}
public void showInfo() { // 버스의 정보를 출력하는 Method
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) { // 승객을 태울시
this.money += money; // 승객이 지불한 금액으로 지하철의 수입이 증가
passengerCount++; // 승객수 1증가
}
public void showInfo() { // 지하철의 정보를 출력하는 Method
System.out.println("지하철 " + lineNumber + "호선의 승객은" +passengerCount +
"명이고 , 수입은 " + money + "원 입니다.");
}
}
public class TakeTrans {
public static void main(String[] args) {
Student j = new Student("James", 5000); // 이름이 James고 소지금이 5000원인 학생 생성
Student t = new Student("Tomas", 10000); // 이름이 Tomas 소지금이 10000원인 학생 생성
Bus bus100 = new Bus(100); // 100번 버스 생성
j.takeBus(bus100); // 생성된 버스가 매개변수로 들어가 자신의 Method를 .
// 호출하여 승객을증가 시키고 수입이 늘어난다
j.showInfo(); // 학생 정보 출력
bus100.showInfo(); // 버스 정보 출력
Subway subwayGreen = new Subway(2); // 2호선 지하철 생성
t.takeSubway(subwayGreen);
t.showInfo(); // 학생 정보 출력
subwayGreen.showInfo(); // 지하철 정보 출력
}
}
출력 결과
위와 같은 예제는 상속을 사용하면 좀 더 간결해진다.
이후에 상속을 이용해 다시 코딩해보자
728x90
'Java' 카테고리의 다른 글
[Java] 배열을 이용한 예제( 1차원배열의 합, 2차원배열의 합, 잔돈구하기) (0) | 2021.05.12 |
---|---|
[Java] static 변수 (0) | 2021.05.12 |
[Java] 객체지향 프로그래밍(OOP) 과 클래스(Class) (0) | 2021.05.11 |
[Java] 배열을 이용한 성적 처리 프로그램 (0) | 2021.05.11 |
반복문 - for 문과 예시(1~5까지 합을구하기, 구구단출력) (0) | 2021.05.11 |
Comments