트랙
/
C#
C#
/
연습 문제
/
원격 조종 대회
원격 조종 대회

원격 조종 대회

학습 연습 문제

소개

인터페이스

인터페이스는 관련된 기능을 하나로 묶어 정의하는 멤버들을 담은 타입이에요. 인터페이스는 클래스를 사용하는 쪽과 구현을 분리해서, 여러 가지 서로 다른 구현을 가능하게 하거나 서식, 비교, 변환 같은 일반적인 동작을 지원할 수 있게 해줘요.

인터페이스의 문법은 클래스나 구조체와 비슷하지만, 메서드와 속성이 시그니처로만 나타나고 본문은 제공되지 않아요.

public interface ILanguage
{
    string LanguageName { get; set; }
    string Speak();
}

public class ItalianTaveller : ILanguage, ICloneable
{
    public string LanguageName { get; set; } =  "Italiano";

    public string Speak()
    {
        return "Ciao mondo";
    }

    public object Clone()
    {
        ItalianTaveller it = new ItalianTaveller();
        it.LanguageName = this.LanguageName;
        return it;
    }
}

인터페이스에 정의된 모든 연산은 반드시 구현해야 해요.

인터페이스는 다른 멤버들뿐만 아니라 인스턴스 메서드와 속성도 포함할 수 있어요.

정렬

객체를 다른 객체와 비교할 수 있게 하려면 IComparable<T> 인터페이스를 구현해야 해요. 이 인터페이스에는 구현해야 하는 메서드가 하나 있어요: int CompareTo(T other).

CompareTo 메서드가 반환할 수 있는 값은 세 가지예요.

  • 0보다 작은 값: 현재 객체가 다른 객체보다 작아요.
  • 0보다 큰 값: 현재 객체가 다른 객체보다 커요.
  • 값이 0: 현재 객체가 다른 객체와 같아요.

지침

이 연습 문제에서는 무선 조종 자동차를 가지고 좀 더 많은 작업을 해봐요.

실험용 자동차가 개발되었고, 테스트 트랙은 양산형과 실험용 모델을 모두 다룰 수 있도록 수정해야 해요. 두 종류의 자동차는 이미 만들어졌으니, 테스트 트랙에서 둘 다 처리할 방법을 찾아야 해요.

게다가 양산형 자동차가 성과를 내기 시작했어요. 팀장은 양산형 자동차의 순위를 공개해서 경쟁 분위기를 이어가고 싶어 해요.

1. 같은 테스트 트랙에서 자동차를 운전할 수 있게 만들기

IRemoteControlCar 인터페이스에 메서드를 추가해서 두 종류의 자동차에 대한 Drive() 구현을 노출해 주세요.

TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

2. 테스트 트랙에서 서로 다른 모델이 이동한 거리를 비교할 수 있게 만들기

IRemoteControlCar 인터페이스에 속성을 추가해서 두 종류의 자동차에 대한 DistanceTravelled 속성의 구현을 노출해 주세요.

var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20

3. 양산형 자동차의 순위를 매길 수 있게 만들기

ProductionRemoteControlCar 클래스에서 IComparable<T> 인터페이스를 구현해 주세요. 자동차의 기본 정렬 순서는 승리 수의 오름차순이어야 해요.

전달받은 자동차를 승리 수의 오름차순으로 정렬해서 반환하도록 정적 메서드 TestTrack.GetRankedCars()를 구현해 주세요.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

원격 조종 대회 문제를 시작해 볼 준비가 됐나요?

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