트랙
/
C#
C#
/
연습 문제
/
Need for Speed
Need for Speed

Need for Speed

학습 연습 문제

소개

생성자

_클래스_의 인스턴스를 만들려면 new 연산자를 통해 _생성자_를 호출해요. 생성자는 새로 만들어진 인스턴스를 초기화하는 것을 목표로 하는 특별한 종류의 메서드예요. 생성자는 일반 메서드와 비슷하게 생겼지만, 반환 타입이 없고 이름이 클래스의 이름과 같아요.

class Library
{
    private int books;

    public Library()
    {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

일반 메서드와 마찬가지로 생성자도 매개변수를 가질 수 있어요. 생성자의 매개변수는 보통 나중에 접근할 수 있도록 (비공개) 필드에 저장하거나, 아니면 한 번만 쓰이는 계산에 사용해요. 인자는 일반 메서드에 인자를 전달하듯이 생성자에도 전달할 수 있어요.

class Building
{
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight)
    {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2)

지침

이 연습 문제에서는 여러 종류의 무선 조종 자동차 사이의 경주를 구성해요. 각 자동차는 고유한 속도와 배터리 소모 특성을 가지고 있어요.

자동차는 완전히 충전된(100%) 배터리로 시작해요. 무선 조종기로 자동차를 조종할 때마다 자동차는 속도만큼 미터를 이동하고, 남은 배터리 비율은 배터리 소모량만큼 줄어들어요.

자동차의 배터리가 배터리 소모 비율보다 낮으면 더 이상 자동차를 조종할 수 없어요.

각 경주 트랙은 고유한 거리를 가지고 있어요. 자동차는 배터리가 다 닳기 전에 트랙을 완주할 수 있는지 확인하는 방식으로 테스트해요.

여섯 개의 과제가 있고, 각 과제에서는 무선 조종 자동차 인스턴스를 다뤄요.

1. 무선 조종 자동차 만들기

RemoteControlCar 클래스의 생성자를 정의해서 무선 조종 자동차를 만들 수 있게 해요. 생성자는 자동차의 속도(미터)와 배터리 소모 비율을 두 매개변수로 받아요(둘 다 int 타입이에요):

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

2. 경주 트랙 만들기

RaceTrack 클래스의 생성자를 정의해서 경주 트랙을 만들 수 있게 해요. 생성자는 트랙의 거리(미터)를 유일한 매개변수로 받아요(이 매개변수는 int 타입이에요):

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. 자동차 조종하기

자동차의 속도를 기준으로 주행한 미터 수를 갱신하는 RemoteControlCar.Drive() 메서드를 구현해요. 또한 자동차가 주행한 미터 수를 반환하는 RemoteControlCar.DistanceDriven() 메서드도 구현해요:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.DistanceDriven();
// => 5

4. 배터리 소모 확인하기

자동차의 배터리 소모량을 기준으로 배터리를 소모시키도록 RemoteControlCar.Drive() 메서드를 수정해요. 또한 배터리가 소모되었는지 나타내는 RemoteControlCar.BatteryDrained() 메서드도 구현해요:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.BatteryDrained();
// => false

5. Nitro 무선 조종 자동차 만들기

가장 많이 팔리는 무선 조종 자동차는 Nitro로, 최고 속도가 무려 50미터이고 배터리 소모는 4%예요. 이 유형의 자동차를 반환하는 (정적) RemoteControlCar.Nitro() 메서드를 구현해요:

var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50

6. 무선 조종 자동차가 경주를 완주할 수 있는지 확인하기

경주 트랙을 완주하려면 자동차가 트랙의 거리만큼 주행할 수 있어야 해요. 즉, 결승선을 통과하기 전에 배터리가 다 닳지 않아야 해요. RemoteControlCar 인스턴스를 매개변수로 받아 자동차가 경주 트랙을 완주할 수 있으면 true를, 그렇지 않으면 false를 반환하는 RaceTrack.TryFinishTrack() 메서드를 구현해요:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);

int distance = 100;
var raceTrack = new RaceTrack(distance);

raceTrack.TryFinishTrack(car);
// => true
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

Need for Speed 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.