GiantStepDEV

클래슀 섀계

클래슀 μ •μ˜

  • μžλ™μ°¨λ₯Ό 상속 λ°›μ•„ 승용차, 슀포츠카, λ²„μŠ€, λ§Œλ“€κΈ°
  • μžλ™μ°¨μ˜ ν•„λ“œλŠ” μžλ™μ°¨μ—μ„œ μ •μ˜ ν•΄μ„œ 상속을 쀌
  • μžλ™μ°¨λŠ” μƒμ†μš© 차이며 μš΄ν–‰ ν•˜μ§€ μ•ŠλŠ” μžλ™μ°¨

μžλ™μ°¨

μžλ™μ°¨λŠ” 객체화가 μ•ˆλ˜λ―€λ‘œ 좔상화

κ΅¬ν˜„ν•΄μ•Ό ν•  κ³΅ν†΅μ˜ λ©”μ†Œλ“œλŠ” κΈ°λ³Έ μžλ™μ°¨ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ„œ μƒμ†μ£ΌλŠ” 것도 쒋은 방법

  • 속도
  • μ—°λΉ„
  • μ—°λ£Œνƒ±ν¬ 크기
  • μ’Œμ„μˆ˜
  • μ°¨λŸ‰μ΄λ¦„

슀포츠카

  • μ—°λΉ„ : 8km
  • 속도 : 250km
  • μ—°λ£Œ 탱크 크기 : 30 리터
  • μ’Œμ„μˆ˜ : 2
  • μ°¨λŸ‰μ΄λ¦„μ€ μƒμ„±μžμ—μ„œ μž…λ ₯ λ°›μ•„μ„œ μ„€μ •
  • λΆ€κ°€κΈ°λŠ₯ : 터보기λŠ₯ (켜면 속도 20% ν–₯상)

승용차

  • μ—°λΉ„ : 12km
  • 속도 : 200 km
  • μ—°λ£Œ 탱크 크기 : 45 리터
  • μ’Œμ„μˆ˜ : 4
  • μ°¨λŸ‰μ΄λ¦„μ€ μƒμ„±μž μž…λ ₯ λ°›μ•„μ„œ μ„€μ •
  • λΆ€κ°€κΈ°λŠ₯ : 트렁크 (켜면 승객 1λͺ… μΆ”κ°€)

λ²„μŠ€

  • μ—°λΉ„ : 5km
  • 속도 : 150km
  • μ—°λ£Œνƒ±ν¬ 크기 : 100리터
  • μ’Œμ„μˆ˜ : 20
  • μ°¨λŸ‰μ΄λ¦„μ€ μž…λ ₯ μƒμ„±μž λ°›μ•„μ„œ μ„€μ •
  • λΆ€κ°€κΈ°λŠ₯ : λ³΄μ‘°μ—°λ£Œνƒ±ν¬(켜면 μ—°λ£Œνƒ±ν¬ 크기가 30리터 λŠ˜μ–΄λ‚¨)

μ„€μ • 정보

κΈ°λ³Έ μ„€μ •

  • 기름값은 1리터당 2000원
  • μ—°λΉ„λž€? 리터당 주행거리λ₯Ό 의미 ν•©λ‹ˆλ‹€.
  • λΆ€μ‚° 400km, 강릉 200km, λŒ€μ „ 150km, κ΄‘μ£Ό 300km
  • 처음 μΆœλ°œμ‹œ μ—°λ£Œν†΅μ—λŠ” 기름이 μ—†λŠ” μƒνƒœ μž…λ‹ˆλ‹€.

κΈ°λŠ₯ κ΅¬ν˜„

  • 이동 지역을 선택 ν•˜μ„Έμš” (1. λΆ€μ‚°, 2. λŒ€μ „, 3. 강릉, 4. κ΄‘μ£Ό)
  • 이동할 승객 수λ₯Ό μž…λ ₯ ν•˜μ„Έμš” ( 1 ~ 100 사이)
  • 이동 μ°¨λŸ‰μ„ 선택 ν•˜μ„Έμš”. (1. 슀포츠카, 2.승용차, 3번 λ²„μŠ€)
  • λΆ€κ°€ κΈ°λŠ₯의 ON/OFF λ₯Ό 선택 ν•˜μ„Έμš”.

κ²°κ³Ό 좜λ ₯

  • μ°¨λŸ‰ 이름 ν‘œμ‹œ
  • 이동에 ν•„μš”ν•œ 총 λΉ„μš© μ‚°μΆœ(μ •μˆ˜ν‘œμ‹œ) : (단, 이동 νšŸμˆ˜λŠ” νŽΈλ„λ§Œ 계산)
  • 주유 횟수(μ •μˆ˜ν‘œμ‹œ) :
  • 총 μ‹œκ°„ 계산 ( μ‹œκ°„λ‹¨μœ„λ‘œ ν‘œμ‹œν•˜λ˜ μ†Œμˆ˜μ  이라 2μžλ¦¬κΉŒμ§€ ν‘œμ‹œ) :

* κ°•μ‚¬λ‹˜μ΄ μ•Œλ €μ£Όμ‹  μ½”λ“œλ₯Ό 기반으둜 ν•™μŠ΅ ν›„ λ‚΄κ°€ λ‹€μ‹œ μž‘μ„±ν•΄λ³΄μ•˜λ‹€.

* ꡬ쑰λ₯Ό μ§€ λ•Œμ—λŠ” 섀계도λ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  좜λ ₯에 ν•„μš”ν•œ κΈ°λŠ₯을 순차적으둜 μž‘μ„±ν•΄ λ‚˜κ°ˆ 것
* κΈ°λŠ₯은 가급적 ν•œ κΈ°λŠ₯에 ν•˜λ‚˜μ˜ κΈ°λŠ₯만 λ“€μ–΄κ°ˆ 수 μžˆλ„λ‘ κ΅¬ν˜„ν•  것
* ν•„λ“œ κ°―μˆ˜λŠ” μ΅œμ†Œν•œμœΌλ‘œ..
* λ‹Ήμž₯ μž‘λ™ν•  μ½”λ“œλ₯Ό λ§Œλ“€μ§€ 말고, μΆ”ν›„ μˆ˜μ •ν•  λ•Œ νŽΈν•œ μͺ½μœΌλ‘œ κ΅¬ν˜„ν•  것
1. ν—·κ°ˆλ¦¬μ§€ μ•Šκ²Œ 섀계도(Car 'λΆ€λͺ¨ 클래슀') λ¨Όμ € μ§°λ‹€.
 > Car ν΄λž˜μŠ€μ— 좔상화λ₯Ό κ±Έκ³ (abstract) 각 μžλ™μ°¨μ— λ“€μ–΄κ°ˆ ν•„λ“œκ°’μ„ μ„ μ–Έν•˜κ³ ,
   κ²°κ³Ό 좜λ ₯에 ν•„μš”ν•œ κΈ°λŠ₯λ“€ 쀑 곡톡뢀뢄은 Car ν΄λž˜μŠ€μ— κ΅¬ν˜„ν–ˆλ‹€.
> κ΅ν†΅μˆ˜λ‹¨ λ³„λ‘œ λ‹€λ₯Έ λΆ€κ°€κΈ°λŠ₯은 abstract ν•˜μ—¬ ꡬ체적인 κΈ°λŠ₯은 각 μžμ‹ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„
2. [슀포츠카, 승용차, λ²„μŠ€] μžμ‹ 클래슀 생성
 > μƒμ„±μžμ—μ„œ 이름을 μž…λ ₯ λ°›μ•„ λ³΄μ—¬μ£ΌλŠ” λ©”μ†Œλ“œλ„ 같이 λ§Œλ“€μ—ˆλ‹€.
3. 메인은 μ‚¬μš©μžκ°€ 주욱 μž…λ ₯ν•˜λ„λ‘ ν•΄μ„œ 각 값을 λŒ€μž…ν•˜κ³ ,
κ΅ν†΅μˆ˜λ‹¨μ„ 선택할 λ•Œ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ™μ λ°”μΈλ”©μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€λ‹€. 

Main

package μžλ™μ°¨μ’…ν•©μ˜ˆμ œ;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int[] dist = {0, 400, 150, 200, 300};
        Car car = null;
        Scanner sc = new Scanner(System.in);
        System.out.print("이동 μ§€μ—­ [1]λΆ€μ‚° [2]λŒ€μ „ [3]강릉 [4]κ΄‘μ£Ό : ");
        int city = sc.nextInt();
        System.out.print("승객 수 : ");
        int passengers = sc.nextInt();
        System.out.print("이동 μ°¨λŸ‰ [1]슀포츠카 [2]승용차 [3]λ²„μŠ€ : ");
        int transportation = sc.nextInt();
        switch(transportation) {
            case 1 : car = new SportsCar("페라리"); break;
            case 2 : car = new Sedan("볼보 S90"); break;
            case 3 : car = new Bus("522번"); break;
            default : System.out.println("μ°¨λŸ‰ 선택을 잘λͺ» ν•˜μ…¨μŠ΅λ‹ˆλ‹€.");
        }
        System.out.print("λΆ€κ°€ κΈ°λŠ₯ [1]ON [2]OFF : ");
        int option = sc.nextInt();
        if(option == 1) car.addOption(true);
        car.MoveCount(passengers);

        System.out.println("====== " + car.getCarName() + " ======");
        System.out.println("총 λΉ„μš© : " + car.totalCost(dist[city]) + "원");
        System.out.println("주유 횟수 : " + car.fuelCount(dist[city]) + "회");
        System.out.printf("총 μ‹œκ°„ : %.2f\n",car.totalTime(dist[city]));
    }
}

Car

tmi) 차에 λŒ€ν•΄μ„œλŠ” 잘 λͺ°λΌμ„œ ν•˜λ‚˜ν•˜λ‚˜ λ‚΄κ°€ 이해할 수 μžˆλ„λ‘ ν’€μ–΄κ°€λ©΄μ„œ μž‘μ„±ν–ˆλ‹€.

● μ—°λΉ„κ°€ 8이면.. 1λ¦¬ν„°λ‘œ 8kmλ₯Ό 갈 수 있음. 50λ¦¬ν„°λ‘œ 400kmλ₯Ό 갈 수 μžˆλ‹€.
● 총 거리가 10km μ—°λΉ„κ°€ 2km 기름값 1리터 2000원 => 10리터 ν•„μš”
   μ΄ 거리 / μ—°λΉ„ * 2000 = 5 * 2000 = 10000
● 이동 횟수 = 승객 수 / μ’Œμ„ 수
● 주유 횟수 = (거리 * μ΄λ™νšŸμˆ˜) / μ—°λΉ„ / μ—°λ£Œνƒ±ν¬ 크기
● 이동에 ν•„μš”ν•œ 총 λΉ„μš© = 거리 * 이동 횟수 / μ—°λΉ„ * 기름값(2000)
● 총 μ‹œκ°„ = 거리 * μ΄λ™νšŸμˆ˜ / μ‹œμ†
● μ™ΈλΆ€μ—μ„œ μž…λ ₯ λ°›λŠ” 정보 : 승객 수, 거리, λΆ€κ°€λͺ¨λ“œ(on/off)
package μžλ™μ°¨μ’…ν•©μ˜ˆμ œ;

abstract class Car {
    protected int speed;
    protected int fuelEfficiency;
    protected int fuelTank;
    protected int seat;
    protected int moveCount;
    protected String carName;

    // μ°¨λŸ‰ 이름 ν‘œμ‹œ
    public String getCarName() {
        return carName;
    }
    // 이동 횟수
    public int MoveCount(int passenger) {
        if(passenger % seat != 0) moveCount = (passenger / seat) + 1;
        else moveCount = passenger / seat;
        return moveCount;
    }

    public int fuelCount(int dist) {
        if(dist * moveCount / fuelEfficiency % fuelTank != 0) return dist * moveCount / fuelEfficiency / fuelTank + 1;
        return dist * moveCount / fuelEfficiency / fuelTank;
    }

    public int totalCost(int dist) {
        return dist * moveCount / fuelEfficiency * 2000;
    }

    public double totalTime(int dist) {
        return (double)dist * moveCount / speed;
    }

    public abstract void addOption(boolean isOption);
}

SportsCar

package μžλ™μ°¨μ’…ν•©μ˜ˆμ œ;

public class SportsCar extends Car{
    String name;
    SportsCar(String name) {
        carName = name;
        fuelEfficiency = 8;
        speed = 250;
        fuelTank = 30;
        seat = 2;
    }

    @Override
    public void addOption(boolean isOption) {
        if(isOption) speed *= 1.2;
    }
}

Sedan

package μžλ™μ°¨μ’…ν•©μ˜ˆμ œ;

public class Sedan extends Car{
    String name;
    Sedan(String name) {
        carName = name;
        fuelEfficiency = 12;
        speed = 200;
        fuelTank = 45;
        seat = 4;
    }

    @Override
    public void addOption(boolean isOption) {
        if(isOption) seat += 1;
    }
}

Bus

package μžλ™μ°¨μ’…ν•©μ˜ˆμ œ;

public class Bus extends Car{
    String name;
    Bus(String name) {
        carName = name;
        fuelEfficiency = 5;
        speed = 150;
        fuelTank = 100;
        seat = 20;
    }

    @Override
    public void addOption(boolean isOption) {
        if(isOption) fuelTank += 30;
    }
}
profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!