jnsorn / rent-company

๐Ÿ’ซ ์ƒ์†, interface ์—ฐ์Šต ์˜ˆ์ œ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rent-company

์ฐจ๋Ÿ‰์— ๋”ฐ๋ฅธ ์—ฐ๋ฃŒ ์ฃผ์ž… ์‹ค์Šต์„ ํ†ตํ•ด ์ƒ์†๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ดํ•ดํ•œ๋‹ค.

๐Ÿš— ์˜ˆ์ œ

๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ๋ Œํ„ฐ์นด๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์ฐจ๋Ÿ‰์€ Sonata 2๋Œ€, Avante 1๋Œ€, K5 2๋Œ€๋กœ ์ด 5๋Œ€์˜ ์ฐจ๋Ÿ‰์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค. ์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ๊ณ ๊ฐ์ด ์ธํ„ฐ๋„ท์œผ๋กœ๋ถ€ํ„ฐ ์˜ˆ์•ฝํ•  ๋•Œ ์—ฌํ–‰ํ•  ๋ชฉ์ ์ง€์˜ ๋Œ€๋žต์ ์ธ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ์ด ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ์ฐจ๋Ÿ‰ ๋ณ„๋กœ ํ•„์š”ํ•œ ์—ฐ๋ฃŒ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.

์ฐจ๋Ÿ‰ ๋ณ„๋กœ ์ฃผ์ž…ํ•ด์•ผ ํ•  ์—ฐ๋ฃŒ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ ์ฐจ๋Ÿ‰๋ณ„ ์—ฐ๋น„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Sonata : 10km/๋ฆฌํ„ฐ
  • Avante : 15km/๋ฆฌํ„ฐ
  • K5 : 13km/๋ฆฌํ„ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ - 1๋‹จ๊ณ„

  • ์ƒ์†๊ณผ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • ์œ„ ์š”๊ตฌ์‚ฌํ•ญ์„ if/else ์ ˆ์„ ์“ฐ์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์•„๋ž˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์ž๋™์ฐจ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์˜ ์ˆซ์ž๋Š” ์ž๋™์ฐจ๋กœ ์—ฌํ–‰ํ•  ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

public class RentCompanyTest {
    private static final String NEWLINE = System.getProperty("line.separator");

    @Test
    public void report() throws Exception {
        RentCompany company = RentCompany.create(); // factory method๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑ
        company.addCar(new Sonata(150));
        company.addCar(new K5(260));
        company.addCar(new Sonata(120));
        company.addCar(new Avante(300));
        company.addCar(new K5(390));

        String report = company.generateReport();
        assertThat(report).isEqualTo(
            "Sonata : 15๋ฆฌํ„ฐ" + NEWLINE +
            "K5 : 20๋ฆฌํ„ฐ" + NEWLINE +
            "Sonata : 12๋ฆฌํ„ฐ" + NEWLINE +
            "Avante : 20๋ฆฌํ„ฐ" + NEWLINE +
            "K5 : 30๋ฆฌํ„ฐ" + NEWLINE
        );
    }
}

ํžŒํŠธ ์ƒ์†์„ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ณตํ†ต ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•  Car ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. Car ํด๋ž˜์Šค์— abstract๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

public abstract class Car {
    /**
     * ๋ฆฌํ„ฐ๋‹น ์ด๋™ ๊ฑฐ๋ฆฌ. ์ฆ‰, ์—ฐ๋น„
     */
    abstract double getDistancePerLiter();

    /**
     * ์—ฌํ–‰ํ•˜๋ ค๋Š” ๊ฑฐ๋ฆฌ
     */
    abstract double getTripDistance();
    
    /**
     * ์ฐจ์ข…์˜ ์ด๋ฆ„
     */
    abstract String getName();

    /**
     * ์ฃผ์ž…ํ•ด์•ผํ•  ์—ฐ๋ฃŒ๋Ÿ‰์„ ๊ตฌํ•œ๋‹ค.
    */
    double getChargeQuantity() {
        return getTripDistance() / getDistancePerLiter();
    }
}

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ - 2๋‹จ๊ณ„

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ ์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“ ์ •๋ฆฌ

About

๐Ÿ’ซ ์ƒ์†, interface ์—ฐ์Šต ์˜ˆ์ œ


Languages

Language:Java 100.0%