확장 메서드는 새로운 파생 타입을 만들거나 다시 컴파일하거나 원래 타입을 수정하지 않고도 기존 타입에 메서드를 추가할 수 있게 해줘요. 확장 메서드는 static 메서드로 정의되지만 인스턴스 메서드 구문을 사용해 호출해요. 첫 번째 매개변수 앞에는 this 한정자가 붙고, 메서드가 어떤 타입에서 작동하는지 지정하며, 네임스페이스 수준에서 스코프에 포함돼요.
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
이 연습 문제에서는 로그 줄을 처리해요.
각 로그 줄은 다음과 같은 형식의 문자열이에요: "[<LEVEL>]: <MESSAGE>".
로그 레벨은 세 가지가 있어요:
INFOWARNINGERROR여기에는 여러 개의 과제가 있어요. 각 과제는 로그 줄 하나를 받아서 그 줄로 무언가를 하도록 해요.
지난달의 로그를 살펴보면, 테스트 메시지는 항상 특정 부분 문자열 뒤에 있다는 걸 알 수 있어요. 조만간 테스트 메시지를 추출해야 할 것 같아서, 그걸 도와줄 도우미 메서드를 만들기로 해요.
(정적) LogAnalysis.SubstringAfter() 확장 메서드를 구현해요. 이 메서드는 문자열 구분자를 하나 받아서 그 구분자 뒤의 부분 문자열을 반환해요.
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
자세히 살펴보니, 로그 레벨은 항상 대괄호([와 ]) 사이에 있네요. 마찬가지로 조만간 로그 레벨을 추출해야 할 것 같아서, 그걸 도와줄 도우미 메서드를 하나 더 만들기로 해요.
(정적) LogAnalysis.SubstringBetween() 확장 메서드를 구현해요. 이 메서드는 문자열 구분자 두 개를 받아서, 두 구분자 사이에 있는 부분 문자열을 반환해요.
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
(정적) LogAnalysis.Message() 확장 메서드를 구현해서 로그에 담긴 메시지를 반환해요.
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
(정적) LogAnalysis.LogLevel() 확장 메서드를 구현해서 로그의 로그 레벨을 반환해요.
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.