책 정리/Effective C#
item 39, 닷넷의 유효성 검증 기능을 사용하라.
최익필
2010. 8. 10. 00:55
이 포스트를 만든 목적
- 공부 하려고
이 포스트의 준비물
- gVim 7.2
- Microsoft Visual C# 2010 Express
참고 서적
- Effective C#
내용
닷넷의 유효성 검증 기능은 무엇을 말하는가?
- .NET C# 애플리케이션 에선, 사용자가 입력된 값들이 올바른지 검증하는 기능을 뜻한다.
- .NET ASP 웹 애플리케이션 에선, 사용자가 전송한 값들이 올바른지 검증하는 기능을 뜻한다.
어떤 검증 기능이 있는가?
- .NET ASP APP(애플리케이션)의 경우, 일차적으로 RegularExpressionValidator 을 사용하여, 정규표현식으로 검증할 수 있다. 일반적으로 .NET ASP APP뿐만 아니라, .NET C# APP에서도 많이 사용한다. 이 방법을 "정규표현식 검증법" 이라고 할 수 있다.
- 사용법은 http://msdn.microsoft.com/en-us/library/eahwtc9e.aspx 참조
- .NET C# APP 의 경우, 마찬가지로 정규표현식 검증법을 사용할 수 있고, 추가로 더 많은 기능과 쓰임을 위하여, System.Windows.Forms.Control.Validating 이벤트 핸들러를 구현하여, 처리할 수 있다. 이 방법을 사용하면, 검증 루틴을 따로 함수로 손쉽게 뺄 수 있으므로, 많은 검증을 처리하기에 쉽다.
- 그 대신 손이 많이 간다.
우선 .NET ASP APP 는 생략한다. 왜냐하면, 내 관심 대상이 아니다. 그러므로 System.Windows.Forms.Control.Validating에 대해서 정리하겠다.
어떻게 System.Windows.Forms.Control.Validating 이벤트를 사용할 수 있는가?
- 모든 컨트롤(모든 컨트롤들을 확인해 보지 않았으나. Control 클래스는 기본적으로 public event EventHandler Validated; public event CancelEventHandler Validating; 를 가지고 있으니, 모든 콘트를이라 해도 맞겠다.)은 Validated, Validating 을 가지고 있으므로, 이 이벤트 핸들러에 핸들러를 붙여 주면 된다.
- Validating 이벤트 발생 후, Validated 이벤트가 발생하므로, Validating 에서 1차 검증을 하여, 그 결과로 Validated를 발생 시킬지 말지 결정할 수 있다. 이러한 순서 때문에, 일반적으로 Validating 이벤트에서 유효성 검증을 한다.
- Validating의 이벤트 발생 시점은, 컨트롤에 포커스가 오고 포커스가 떠날 때, 이때가 바로 이벤트 발생 시점 이다.
- 만약 Validating 이 Cancel 버튼 같은 "취소"로 발생했을 경우, Validated 이벤트까지 가면, 안될 수 있으므로, Validating 이벤트의 인자인 CanleEventArge.Cancel 을 false 로 만들어야 할 경우가 생긴다.
- 예제코드는 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validating.aspx 참조하길 바란다.
System.Windows.Forms.Control.Validating 사용 시 주의해야 할 것이 있는가?
포커스가 한 번도 없었던 컨트롤의 경우 유효성 검증 이벤트가 발생 되지 않는다. 그러므로, OK 버튼 등 "실행을 위한 이벤트" 발생시 모든 컨트롤들에 Focus 함수를 호출해 주고. 폼의 Validate를 호출해 줌으로써, 강제로 Validating 이벤트를 발생시켜야 한다.
맛보기 코드
결론
- 간단하게 하고 싶으면, 실행 이벤트 발생 될 때, 정규표현식으로 유효성 검증하는 게 좋고, 실시간으로, 더욱 다양한 검증을 해야 한다면, Validating 이벤트와 Validated 이벤트에 핸들러를 붙여 주는 게 좋다.
여담
- 책에선 DataGrid/DataSet 에 대해서도 언급하고 있으나, 필요할 때 찾아 볼 생각으로 생략한다.
- http://speller.cs.pusan.ac.kr/ 에서 온라인 한국어 맞춤법/문법 검사기를 돌려 보니, 엄청나게 틀려 있었다.