- 객체지향에 관한 예제들.
- 다음은 속도가 다른 두 기차(여기서는 ktx와 통일호)가 서로 다른 역을 출발해서 속도가 더 빠른 기차(ktx)가 언제 속도가 더 느린 기차(통일호)를 추월하는지를 계산해 내는 예제이다.
package Train;
public class Main {
public static void main(String[] args) {
TrainCalculator calc = new TrainCalculator(); // TrainCalulator객체 생성.
Train ktx = new Train("ktx", 300, 0); // ktx 객체 생성. 시속 300km. 처음 시작점은 0.
Train union = new Train("union", 88, 90); // 통일호 객체 생성. 시속 88km. 처음 시작점은
// 90km.
System.out.println(calc.calcTime(ktx, union));// 결과 출력.
}
}
package Train;
public class Train {
String name; // 기차이름.
float speed; // 기차속도.
float position; // 기차 위치.
public Train(String name, float speed, float position) { // 생성자.
super();
this.name = name;
this.speed = speed;
this.position = position;
}
public float runTrain() {// 기차 위치 계산.
// 기차의 위치를 가장 잘 아는 것은 기차 자신이다!
this.position += (speed / (float) 60);
return this.position;
}
}
package Train;
public class TrainCalculator { // 빠른기차가 느린기차를 언제 추월하는지 계산.
public int calcTime(Train t1, Train t2) {
int count = 0;
while (true) {
count++;
if (t1.runTrain() > t2.runTrain()) {
break;
}
}
return count;
}
}
- 다음은 카페에서 점원이 매출기록을 작성하는 예제이며 수입과 지출을 입력하고 합산한 금액을 확인, 이전 기록 삭제, 입력한 내용 보기를 지원한다.
- Main class
- Record class: 금액과 항목을 담고있는 하나의 레코드.
- RecordManager class: 기록들을 담아놓은 배열을 관리. 입력받은 항목의 이름과 금액을 배열에 추가하며 이전 기록을 삭제. 입력된 항목들의 총 합을 계산함.
- RecordUI class: 사용자(점원)에게 메뉴를 보여주고 사용자의 입력을 받음. 결과출력.
package StubCoffee;
public class Main {
public static void main(String[] args) {
RecordUI ui = new RecordUI();
ui.totalUI();
}
}
package StubCoffee;
public class Record {
String name;
int amount;
public Record(String name, int amount) { // 하나의 레코드에는 반드시 항목의 이름과 금액이 존재해야
// 함.
super();
this.name = name;
this.amount = amount;
}
@Override
public String toString() { // 객체내의 변수들을 string으로 보여주기 위해 이클립스에서 자동 생성 메소드.
return "Record [name=" + name + ", amount=" + amount + "]";
}
}
package StubCoffee;
import java.util.Arrays;
public class RecordManager {
Record[] records; // 레코드들을 담아 놓을 records배열. 레코드들이 들어갈 배열이기때문에 타입은 Record.
int idx; // 추가되거나 삭제될 경우 idx변수를 이용해 담고 삭제할 레코드의 위치(index)를 알 수 있다.
public RecordManager() { // 초기에 100개의 공간을 만들어 놓음.
records = new Record[100];
idx = 0;
}
public void removeRecord() { // removeRecrod함수가 호출될 당시의 idx값을 null로 변경하고
// 카운트는 1내림.
records[--idx] = null;
}
public Record[] getRecord() { // 리스트확인을 요청할 경우 records배열을 리턴.
return records;
}
public void addRecord(Record record) { // 사용자로부터 입력받은 record객체를 배열에 담음.
records[idx++] = record;
}
public int getTotalAmount() { // 사용자가 금액들의 합을 요청하는 경우 records배열의 amount들을 모두
// 더해서 리턴함.
int sum = 0;
for (int i = 0; i < idx; i++) {
sum += records[i].amount;
}
return sum;
}
}
package StubCoffee;
import java.util.Scanner;
public class RecordUI {
Scanner scanner;
RecordManager manager;
public RecordUI() {
scanner = new Scanner(System.in);
manager = new RecordManager();
}
public void totalUI() { // 메뉴 출력. 사용자 입력 받음.
System.out.println("1.Add Record");
System.out.println("2.View Total");
System.out.println("3.Remove Record");
System.out.println("4.Show List");
System.out.println("5.Quit");
String oper = scanner.nextLine();
switch (oper) {
case "1":
addJob();
break;
case "2":
viewSum();
break;
case "3":
removeJob();
break;
case "4":
viewList();
case "5":
return;
}
totalUI();
}
private void viewList() { // idx값 만큼 반복해서 getRecord method를 반복하여 입력된 항목들의
// 리스트를 보여줌.
// TODO Auto-generated method stub
for (int i = 0; i < manager.idx; i++) {
System.out.println(manager.getRecord()[i].toString());
}
totalUI(); // 리스트를 다 보여주고 나면 다시 초기 메뉴를 보여줌.
}
private void removeJob() { // 최근 항목 삭제.
// TODO Auto-generated method stub
manager.removeRecord();
System.out.println("삭제되었습니다.");
}
public void viewSum() { // 금액들의 모든 합을 보여줌.
int total = manager.getTotalAmount();
System.out.println(total);
}
public void addJob() { // 항목명과 금액을 사용자로부터 입력받아 record객체를 생성후 manager객체의
// addRecord method에 parameter로 넘겨줌.
while (true) {
System.out.println("TITLE: ");
String title = scanner.nextLine();
System.out.println("AMOUNT: ");
int amount = Integer.parseInt(scanner.nextLine());
Record record = new Record(title, amount);
manager.addRecord(record);
System.out.println("CONTINUE:1 BREAK:2"); // 항목을 추가한 뒤 계속 항목 추가 작업을
// 진행 할지 여부.
String oper = scanner.nextLine();
if (oper.equals("2")) {
break;
}
}
}