이 포스트를 만든 목적
- 공부 하려고
이 포스트의 준비물
- 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/ 에서 온라인 한국어 맞춤법/문법 검사기를 돌려 보니, 엄청나게 틀려 있었다.
'책 정리 > Effective C#' 카테고리의 다른 글
item 44, 애플리케이션에 특화된 예외 클래스를 완벽하게 작성하라. (1) | 2010.08.23 |
---|---|
item 43, reflection을 과도하게 사용하지 말라 (0) | 2010.08.19 |
item 42, reflection을 단순화하기 위해서 attribute를 사용하라 (0) | 2010.08.18 |
item 41, 새로운 구조체보다는 DataSet이 좋다. (0) | 2010.08.15 |
item 40, 적절한 collection 개체를 이용하라 (0) | 2010.08.14 |
item 38, 데이터 바인딩을 사용하라. (0) | 2010.08.04 |
item 37, 표준 환경설정 메커니즘을 이용하라 (0) | 2010.08.03 |
item 36, 닷넷 런타임의 진단기능을 활용하라 (0) | 2010.08.01 |
item 35, 이벤트 핸들러보다 override를 사용하는 편이 낫다. (0) | 2010.08.01 |
item 34, 웹 API는 큰 단위로 작성하라 (0) | 2010.08.01 |
최근댓글