C#은 정적 타입 언어예요. 즉, 컴파일 시점에 모든 것에 타입이 정해져 있어요. 이름에 값을 할당하는 것을 변수를 정의한다고 해요. 변수는 타입을 직접 지정해서 정의할 수도 있고, 할당된 값을 바탕으로 C# 컴파일러가 타입을 추론하게 할 수도 있어요(이를 _타입 추론_이라고 해요). 따라서 다음 두 변수 정의는 같은 의미예요:
int explicitVar = 10; // Explicitly typed
var implicitVar = 10; // Implicitly typed
변수의 값은 = 연산자로 바꿔요. 한 번 정의된 변수의 타입은 절대 바뀌지 않아요.
var count = 1; // Assign initial value
count = 2; // Update to new value
// Compiler error when assigning different type
// count = false;
C#은 객체 지향 언어이고, 모든 함수를 클래스 안에 정의해야 해요. class 키워드로 클래스를 정의해요. 객체(또는 인스턴스)는 new 키워드로 만들어요.
class Calculator
{
// ...
}
var calculator = new Calculator();
클래스 안의 함수를 _메서드_라고 해요. 각 메서드는 매개변수를 0개 이상 가질 수 있어요. 모든 매개변수는 타입을 명시해야 하고, 매개변수에는 타입 추론이 없어요. 마찬가지로 반환 타입도 명시해야 해요. 값은 return 키워드로 메서드에서 반환해요. 다른 파일의 코드에서 메서드를 호출할 수 있게 하려면 public 접근 제한자를 붙여야 해요.
class Calculator
{
public int Add(int x, int y)
{
return x + y;
}
}
메서드는 인스턴스에서 점(.) 문법으로 호출하며, 호출할 메서드 이름을 쓰고 메서드의 각 매개변수에 맞는 인자를 전달해요. 인자는 해당 매개변수의 이름을 지정해서 전달할 수도 있어요.
var calculator = new Calculator();
var sum_v1 = calculator.Add(1, 2);
var sum_v2 = calculator.Add(x: 1, y: 2);
C#의 스코프는 {와 } 문자 사이로 정의돼요.
C#은 두 가지 주석을 지원해요. 한 줄 주석은 //로 시작하고, 여러 줄 주석은 /*와 */ 사이에 넣어요.
Lucian의 여자친구가 집으로 오는 길인데, Lucian은 아직 기념일 저녁 식사를 만들지 않았어요!
이 연습 문제에서는 Lucian이 가장 좋아하는 요리책을 보고 근사한 라자냐를 만들 수 있도록 코드를 작성해요.
라자냐를 만드는 데 걸리는 시간과 관련된 네 가지 작업이 있어요.
매개변수를 받지 않고 라자냐를 오븐에 몇 분 동안 둬야 하는지를 반환하는 Lasagna.ExpectedMinutesInOven() 메서드를 정의해요. 요리책에 따르면 오븐에 둬야 하는 예상 시간은 40분이에요:
var lasagna = new Lasagna();
lasagna.ExpectedMinutesInOven();
// => 40
라자냐가 오븐에 들어가 있었던 실제 시간(분)을 매개변수로 받아서, 이전 작업에서 구한 오븐 예상 시간(분)을 기준으로 라자냐가 오븐에 앞으로 몇 분 더 있어야 하는지를 반환하는 Lasagna.RemainingMinutesInOven() 메서드를 정의해요.
var lasagna = new Lasagna();
lasagna.RemainingMinutesInOven(30);
// => 10
라자냐에 추가한 층의 개수를 매개변수로 받아서, 층 하나를 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 몇 분을 썼는지를 반환하는 Lasagna.PreparationTimeInMinutes() 메서드를 정의해요.
var lasagna = new Lasagna();
lasagna.PreparationTimeInMinutes(2);
// => 4
두 개의 매개변수를 받는 Lasagna.ElapsedTimeInMinutes() 메서드를 정의해요. 첫 번째 매개변수는 라자냐에 추가한 층의 개수이고, 두 번째 매개변수는 라자냐가 오븐에 있었던 시간(분)이에요. 이 메서드는 라자냐를 만드는 데 몇 분을 일했는지를 반환해야 해요. 이 값은 준비 시간(분)과 그 시점까지 라자냐가 오븐에 있었던 시간(분)을 더한 값이에요.
var lasagna = new Lasagna();
lasagna.ElapsedTimeInMinutes(3, 20);
// => 26
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.