프로그래밍을 하다보면 Windows Forms나 Windows Presentation Foundation과 같이 한 단락내에 한 객체에 대해서 여러 속성을 동시에 지정해야 하는 경우가 꼭 있기 마련입니다. VB.NET이나 Object Pascl의 경우 With 절을 이용하여 이런 일을 손쉽게 할 수 있도록 해줍니다만 C#의 경우 마땅히 좋은 방법이 없습니다. 게다가, 이렇게 여러 속성을 나열해놓는 코드를 작성하다보면 코드가 어지럽혀지기 쉬운듯 합니다.
Windows Forms나 Windows Presentation Foundation의 경우 대개 디자이너를 이용하여 작업하는 경우가 많으므로 별 다른 문제가 안되지만 가끔 컨트롤을 직접 추가해야 하거나 디자이너가 지원되지 않는 GTK# 등의 환경에서 저 개인적으로 요긴하게 쓰는 방식이 있어서 소개해봅니다.
위와 같이 myPanel을 최초로 생성하는 줄 다음에 별 다른 의미 없이 공 Bracket을 열고 myPanel에 관한 코드를 집어넣은 뒤 관련 처리가 끝나면 공 Bracket을 닫는 방식입니다. 이렇게 정리를 해두면 #region이나 #endregion보다 훨씬 읽기 편한것 같습니다. :-)
갈수록 바쁜일이 많아지다보니 강좌를 올리는 것 자체가 어려워지고 있습니다. 많은 양해를 부탁드립니다.
오늘은 C#에서 편하게 쓸 수 있는 유틸리티인 Verbatim String에 대해서 조명해 보도록 하겠습니다. Verbatim String은 마치 꽁수처럼 알려져 왔던 @ 이라는 기호가 붙는 문자열을 뜻합니다. 다음의 예제를 살펴보도록 하지요.
string test = @" Welcome to "" My "" Program!";
Verbatim 문자열로 사용할 수 있는 모든 것이 드러난 코드입니다. 따옴표를 이스케이프시키기 위하여 두번 따옴표를 표기했다는 점을 빼면 이스케이프 기호를 한번도 사용하지 않고도 있는 그대로를 가져다 붙인 점이 매우 독특합니다. 이 점을 이용하면 정규표현식과 같이 매우 복잡한 문자열을 보이는 그대로 가져다 쓸 수 있습니다. 즉, 다음과 같은 코드가 가능합니다.
string innerCode = @"/// <summary> /// 대한민국의 주민등록번호 식별 체계에 의하여 제공된 주민등록번호가 올바른 주민등록번호인지의 여부를 판별합니다. /// </summary> /// <remarks> /// 이 메서드는 20세기, 21세기 출생자에 한해서 주민등록번호 유효성 검사를 지원합니다. /// 20세기보다 이전의 출생자의 주민등록번호, 21세기보다 이후의 출생자의 주민등록번호들은 /// 검사 결과가 모두 False로 출력됩니다. /// </remarks> /// <param name=""firstPart"">주민등록번호를 구성하는 앞의 6자리 숫자입니다. 연, 월, 일 순서로 각각 두 자리로 구성된 앞의 6자리입니다.</param> /// <param name=""lastPart"">주민등록번호를 구성하는 뒷쪽의 7자리 숫자입니다. 고유 번호 7자리로 구성되어있습니다.</param> /// <returns>형식에 맞는 주민등록번호이면 True, 맞지 않다면 False를 반환합니다.</returns> public static bool CheckSocialNumber(string firstPart, string lastPart) { string socialNo = firstPart.Trim() + lastPart.Trim();
// 정규식 패턴 문자열입니다. 6자리의 정수 + [1, 2, 3, 4 중 택 1] + 6자리의 정수 string pattern = @""\d{6}[1234]\d{6}"";
// 입력 내역과 정규식 패턴이 일치하면 이 조건문을 통과합니다. if(!Regex.Match(socialNo, pattern, RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace).Success) return false;
// 연도 두 자리를 추출하여 추가합니다. birthYear += socialNo.Substring(0, 2);
// 월 단위 두 자리를 추출합니다. string birthMonth = socialNo.Substring(2, 2);
// 일 단위 두 자리를 추출합니다. string birthDate = socialNo.Substring(4, 2);
try { // 정수로 변환을 시도합니다. 예외가 생기면 catch 블럭으로 이동됩니다. int bYear = int.Parse(birthYear); int bMonth = int.Parse(birthMonth); int bDate = int.Parse(birthDate);
// 20세기보다 이전연도, 21세기보다 이후연도, // 월 표기 수가 1보다 작은 값, 월 표기 수가 12보다 큰 값, // 일 표기 수가 1보다 작은 값, 일 표기 수가 12보다 큰 값에 해당되면 // catch 블럭으로 이동됩니다. if(bYear < 1900 || bYear > 2100 || bMonth < 1 || bMonth > 12 || bDate < 1 || bDate > 31) throw new Exception(""잘못된 날짜 표현입니다.""); } catch { return false; }
Verbatim 문자열을 이용하여 코드 자체를 미리 내장하고 프로그램을 실행하는 도중에 동적으로 컴파일할 수 있습니다. 또한 이와 같이 포함된 Verbatim 문자열은 Obfuscator와 같은 도구로 암호화할 수도 있기 때문에 정보를 보호하기 위한 목적으로도 사용할 수 있습니다.
당신의 의견을 작성해 주세요.