보호 검사와 유효성 검사 패턴
보호 절로 입력을 일찍 검증하고, 올바른 예외를 던지며, 사용자 데이터에는 TryParse 스타일 검사를 사용합니다.
보호 검사와 유효성 검사 패턴은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
보호 구문이 필요한 이유
목표: 메서드를 안전하고 읽기 쉽게 유지합니다.
- 위쪽에 보호 절을 사용합니다
- 구체적인 예외를 발생시킵니다(ArgumentNullException, ArgumentOutOfRangeException)
- 사용자 입력에는 TryParse를 사용합니다
- 빠르게 실패하고 깊은 중첩을 피합니다
초기 보호 구문 데모
위쪽에 작은 검사를 추가하여 인수를 검증하세요. 호출자가 무엇이 잘못되었는지 알 수 있도록 구체적인 예외를 발생시키세요.
using System;
// Demo: validate inputs at the top; keep main logic flat.
public class Program
{
// Compute price with simple rules; guard early.
public static decimal ComputePrice(string sku, int qty, decimal unitPrice)
{
if (sku == null) throw new ArgumentNullException("sku");
if (sku.Length == 0) throw new ArgumentException("sku must not be empty", "sku");
if (qty <= 0) throw new ArgumentOutOfRangeException("qty", "qty must be > 0");
if (unitPrice < 0m) throw new ArgumentOutOfRangeException("unitPrice", "unitPrice must be >= 0");
// Main logic stays simple
decimal subtotal = qty * unitPrice;
if (qty >= 10) subtotal = subtotal * 0.9m; // small bulk discount
return subtotal;
}
public static void Main(string[] args)
{
Console.WriteLine(ComputePrice("ABC", 2, 5m)); // ok
try { Console.WriteLine(ComputePrice("", 2, 5m)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
Guard 도우미 클래스
공통 검사를 작은 Guard 클래스에 추출하여 메서드 본문을 깔끔하고 일관되게 유지하세요.
using System;
// Minimal static helper for common validations (beginner friendly).
public static class Guard
{
public static void NotNull(object value, string name)
{
if (value == null) throw new ArgumentNullException(name);
}
public static void NotNullOrEmpty(string value, string name)
{
if (value == null) throw new ArgumentNullException(name);
if (value.Length == 0) throw new ArgumentException(name + " must not be empty", name);
}
public static void InRange(int value, int minInclusive, int maxInclusive, string name)
{
if (value < minInclusive || value > maxInclusive)
throw new ArgumentOutOfRangeException(name, "Expected " + minInclusive + ".." + maxInclusive);
}
}
public class Program
{
static int ScoreFor(string userId, int level)
{
Guard.NotNullOrEmpty(userId, "userId");
Guard.InRange(level, 1, 10, "level");
// pretend logic
return level * 100;
}
public static void Main(string[] args)
{
Console.WriteLine(ScoreFor("u42", 3));
try { Console.WriteLine(ScoreFor(null, 3)); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name); }
}
}
TryParse 검증
일상적인 잘못된 입력에는 예외를 발생시키는 대신 false를 반환하는 TryParse 방식의 메서드를 우선 사용하세요.
using System;
// Use TryParse for user-provided text; avoid throwing for normal invalid input.
public class Program
{
public static bool TryGetPort(string text, out int port)
{
port = 0;
int value;
if (!int.TryParse(text, out value)) return false;
if (value < 1 || value > 65535) return false;
port = value;
return true;
}
public static void Main(string[] args)
{
int p;
Console.WriteLine("8080 -> " + (TryGetPort("8080", out p) ? ("ok " + p) : "invalid"));
Console.WriteLine("abc -> " + (TryGetPort("abc", out p) ? ("ok " + p) : "invalid"));
}
}
예외 발생과 반환
- 프로그래머 오류에는 예외를 발생시키세요(잘못된 API 사용, 허용되지 않는 null, 범위를 벗어난 값)
- 일반적인 사용자 실수에는 false/결과를 반환하세요(유효하지 않은 텍스트)
- 구체적인 예외 형식을 사용하고 매개 변수 이름을 포함하세요
- 바깥에서 안쪽 순서로 검증하세요. 비용이 낮은 검사부터 수행합니다
모범 사례
팁:
- 경계에서 검증하세요(제어기, 공개 인터페이스)
- 깊은 중첩보다 작은 보호 메서드를 우선 사용하세요
- 오류 메시지는 짧고 명확하게 유지하세요
- 모든 보호 구문에서 기록하지 말고 경계에서 한 번만 로그를 기록하세요
보호 절의 의미
복습
복습: 보호 절로 일찍 검증하고, 프로그래머 오류에는 구체적인 예외를 발생시키며, 일상적인 사용자 입력에는 TryParse를 사용하세요.
자주 묻는 질문
“보호 검사와 유효성 검사 패턴” 강의는 무료인가요?
네 — “보호 검사와 유효성 검사 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“보호 검사와 유효성 검사 패턴”에서 뭘 배우나요?
보호 절로 입력을 일찍 검증하고, 올바른 예외를 던지며, 사용자 데이터에는 TryParse 스타일 검사를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.
“보호 검사와 유효성 검사 패턴” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 로깅 추상화, Debug/Trace
- 기본 프로파일링과 추적(개념)
- 보호 검사와 유효성 검사 패턴