C#의 enum 타입은 이름이 지정된 상수들의 고정된 집합(열거형)을 나타내요. 이 타입의 주된 목적은 숫자 상수를 타입에 안전한 방식으로 다루게 해 주는 것이에요. 사용할 수 있는 값을 미리 정의된 집합으로 제한해 주죠. 간단한 열거형은 다음과 같이 정의할 수 있어요:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
값을 명시적으로 지정하지 않으면, 열거형 멤버에는 자동으로 1씩 증가하는 정수 값이 할당되는데, 첫 번째 값은 0이에요. 값을 직접 지정하는 것도 가능해요:
enum Answer
{
Maybe = 1,
Yes = 3,
No = 5
}
이 연습 문제에서는 로그 라인을 처리해요.
각 로그 라인은 다음과 같은 형식의 문자열이에요: "[<LVL>]: <MESSAGE>".
로그 레벨에는 다음과 같은 것들이 있어요:
TRC (추적)DBG (디버그)INF (정보)WRN (경고)ERR (오류)FTL (치명적)세 가지 과제가 있어요.
위의 로그 레벨에 해당하는 여섯 개의 원소를 가진 LogLevel 열거형을 정의해요.
TraceDebugInfoWarningErrorFatal다음으로, 로그 라인의 로그 레벨을 파싱하는 (static) LogLine.ParseLogLevel() 메서드를 구현해요:
LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info
안타깝게도, 때때로 일부 로그 라인에는 알 수 없는 로그 레벨이 있어요. 이런 로그 라인을 매끄럽게 처리하려면, LogLevel 열거형에 Unknown 원소를 추가해서 알 수 없는 로그 레벨을 파싱할 때 반환되게 해요:
LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown
로그 라인의 로그 레벨은 꽤 길어요. 로그 라인을 저장하는 데 필요한 디스크 공간을 줄이기 위해 짧은 형식이 만들어졌어요: "[<ENCODED_LEVEL>]:<MESSAGE>".
인코딩된 로그 레벨은 로그 레벨을 숫자로 단순하게 매핑한 것이에요:
Unknown - 0
Trace - 1
Debug - 2
Info - 4
Warning - 5
Error - 6
Fatal - 42
짧아진 로그 라인 형식을 출력할 수 있는 (static) LogLine.OutputForShortLog() 메서드를 구현해요:
LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.