트랙
/
C#
C#
/
연습 문제
/
Jedlik의 장난감
Jedlik의 장난감

Jedlik의 장난감

학습 연습 문제

소개

클래스

C#의 대표적인 객체 지향 구성 요소는 _클래스_예요. 클래스는 데이터(필드)와 동작(메서드)을 결합한 것으로, 클래스의 필드와 메서드를 _멤버_라고 해요.

멤버에 대한 접근은 접근 제한자로 제한할 수 있는데, 가장 흔히 쓰이는 두 가지는 다음과 같아요.

  • public: 모든 코드에서 접근할 수 있어요(제한 없음).
  • private: 같은 클래스 안의 코드에서만 접근할 수 있어요.

클래스를 그 클래스의 인스턴스를 만들기 위한 템플릿이라고 생각하면 돼요. 클래스의 인스턴스(_객체_라고도 해요)를 만들려면 new 키워드를 사용해요.

class Car
{
}

// Create two car instances
var myCar = new Car();
var yourCar = new Car();

필드는 타입을 가지며 클래스 어디에서든 정의할 수 있어요. public 필드는 PascalCase로, private 필드는 camelCase로 정의하고 앞에 밑줄 _을 붙여요.

class Car
{
    // Accessible by anyone
    public int Weight;

    // Only accessible by code in this class
    private string _color;
}

필드에는 선택적으로 초깃값을 지정할 수 있어요. 초깃값을 지정하지 않으면 해당 타입의 기본값으로 설정돼요. 인스턴스의 필드 값은 점 표기법을 사용해 접근하고 갱신할 수 있어요.

class Car
{
    // Will be set to specified value
    public int Weight = 2500;

    // Will be set to default value (0)
    public int Year;
}

var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year;   // => 0

// Update value of the field
newCar.Year = 2018;

private 필드는 보통 메서드를 호출하는 부수 효과로 갱신돼요. 이런 메서드는 보통 아무 값도 반환하지 않는데, 이 경우 반환 타입은 void여야 해요.

class CarImporter
{
    private int _carsImported;

    public void ImportCars(int numberOfCars)
    {
        // Update private field from public method
        _carsImported = _carsImported + numberOfCars;
    }
}

지침

이 연습 문제에서는 드디어 돈을 모아서 장만한 무선 조종 자동차를 가지고 놀아볼 거예요.

자동차는 완전히 충전된(100%) 배터리로 시작해요. 리모컨으로 자동차를 조종할 때마다 20미터를 이동하고 배터리가 1퍼센트 줄어들어요.

무선 조종 자동차에는 두 가지 정보를 표시하는 멋진 LED 디스플레이가 있어요:

  • 지금까지 주행한 총 거리, 표시 형식: "Driven <METERS> meters".
  • 남은 배터리 잔량, 표시 형식: "Battery at <PERCENTAGE>%".

배터리가 0%가 되면 더 이상 자동차를 주행할 수 없고, 배터리 표시에는 "Battery empty"가 나타나요.

여섯 개의 작업이 있어요. 각 작업에서는 무선 조종 자동차 인스턴스를 다뤄요.

1. 새 무선 조종 자동차 구입하기

새 무선 조종 자동차 인스턴스를 반환하도록 (static) RemoteControlCar.Buy() 메서드를 구현해요:

RemoteControlCar car = RemoteControlCar.Buy();

2. 주행 거리 표시하기

LED 디스플레이에 표시되는 거리를 반환하도록 RemoteControlCar.DistanceDisplay() 메서드를 구현해요:

var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"

3. 배터리 잔량 표시하기

LED 디스플레이에 표시되는 배터리 잔량을 반환하도록 RemoteControlCar.BatteryDisplay() 메서드를 구현해요:

var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"

4. 주행할 때 주행 거리 업데이트하기

주행 거리를 업데이트하는 RemoteControlCar.Drive() 메서드를 구현해요:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"

5. 주행할 때 배터리 잔량 업데이트하기

배터리 잔량을 업데이트하도록 RemoteControlCar.Drive() 메서드를 업데이트해요:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"

6. 배터리가 방전되면 주행하지 못하게 하기

배터리가 방전되었을 때(0%) 주행 거리를 늘리지도 않고 배터리 잔량을 줄이지도 않도록 RemoteControlCar.Drive() 메서드를 업데이트해요:

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

car.DistanceDisplay();
// => "Driven 2000 meters"

car.BatteryDisplay();
// => "Battery empty"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

Jedlik의 장난감 문제를 시작해 볼 준비가 됐나요?

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