트랙
/
C#
C#
/
연습 문제
/
The Weather in Deather
The Weather in Deather

The Weather in Deather

학습 연습 문제

소개

식 본문 멤버

struct와 class의 멤버는 대부분(주된 예외는 필드예요) 식 본문 멤버 문법을 쓸 수 있어요. 멤버를 식으로 정의하면 전통적인 블록이나 문을 사용할 때보다 더 간결하고 읽기 좋은 코드를 만들 수 있는 경우가 많아요.

메서드와 읽기 전용 속성도 식 본문으로 정의할 수 있는 멤버예요.

public int Times3(int input) => input * 3;

public int Interesting => 1729;

switch 식

switch 식은 값을 여러 패턴 중 하나에 맞춰 보고, 그에 해당하는 값을 반환하거나 해당 동작을 수행할 수 있어요. 이 연결은 => 기호로 나타내요. 또한 각 패턴에는 when 키워드로 도입되는 선택적 케이스 가드를 둘 수 있어요. 케이스 가드 식이 true로 평가되어야 switch의 해당 암이 선택돼요. 케이스(또는 스위치 암)는 적힌 순서대로 평가되고, 일치하는 것을 찾는 즉시 평가가 중단되며 해당 값이 반환돼요.

double xx = 42d;

string interesting = xx switch
{
    0 => "I suppose zero is interesting",
    3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
    3.14 => "π",
    42 => "a bit of a cliché",
    1729 => "only if you are a pure mathematician",
    _ => "not interesting"
};

// => interesting == "a bit of a cliché"

삼항 연산자

삼항 연산자를 쓰면 if 조건을 문 블록이 아니라 식 안에서 정의할 수 있어요. 이 방식은 함수형 프로그래밍의 접근법과 닮아 있고, 코드를 더 표현력 있게 만들고 오류가 생길 가능성을 줄여 주는 경우가 많아요.

삼항 연산자는 세 개의 식을 결합해요. 조건이 하나 있고, 그다음에 조건이 참일 때 평가해서 반환할 식(?로 시작하는 if 부분)과 조건이 거짓일 때 평가해서 반환할 식(:으로 시작하는 else 부분)이 이어져요.

int a = 3, b = 4;
int max = a > b ? a : b;
// => 4

throw 식

throw 식은 throw문을 대신할 수 있고, 특히 삼항 연산자나 다른 복합 식을 더 강력하게 만들어 줘요.

string trimmed = str == null ? throw new ArgumentException() : str.Trim();

지침

기상 관측소와 관련된 레거시 코드를 개선해 달라는 요청을 받았어요.

기상 관측소는 측정값을 받아들이고, 온도와 기압 같은 몇 가지 지표를 출력해요.

1. 적절한 메서드의 간결성과 가독성 개선하기

WeatherStation 클래스에서 적절한 메서드는 식 본문 멤버를 사용해 리팩터링해요. 표현력을 높이고 오류를 줄이는 데 도움이 되도록, 필요한 곳에는 삼항 연산과 switch 식을 사용해요.

모든 테스트가 계속 통과하는지 확인해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

The Weather in Deather 문제를 시작해 볼 준비가 됐나요?

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