Parsing 은 문자열을 특정 데이터 형식으로 변환하는 과정을 말합니다.
예를 들어, 문자열 "123"을 정수형 int로 변환하는 것이 대표적인 예입니다.
Parsing은 주로 입력 값 검증이나 데이터 변환을 위해 사용됩니다.
문자열을 다른 형식으로 변환할 때, 특히 형 변환이 실패할 수 있는 경우를 대비하여 예외 처리를 고려해야 합니다. 예를 들어, "123"을 정수로 변환하는 건 문제가 없지만, "abc" 를 정수로 변환하려고 하면 예외가 발생할 수 있습니다. 이러한 예외를 처리하는 데 유용한 메서드가 바로 *TryParse()* 입니다.
TryParse() 계열 함수들
TryParse()는 형 변환이 실패할 가능성이 있는 경우 예외를 발생시키지 않고 안전하게 변환을 시도할 수 있는 메서드입니다. 형 변환이 성공하면 true를 반환하고, 실패하면 false를 반환합니다. 그에 따라 변환된 값은 out 키워드로 전달됩니다.
예시 : int.TryParse()
string input = "123";
int result;
bool success = int.TryParse(input, out result);
if (success)
{
Console.WriteLine("변환 성공: " + result);
}
else
{
Console.WriteLine("변환 실패");
}
위 예시에서는 문자열 "123"을 int로 변환하는데, 변환이 성공하면 true를 반환하고 result에 123이 저장됩니다. 반대로 "abc"와 같은 변환할 수 없는 문자열을 입력하면 false가 반환되고, result는 기본값인 0이 됩니다.
예시 : float.TryParse()
string input = "12.34";
float result;
bool success = float.TryParse(input, out result);
if (success)
{
Console.WriteLine("변환 성공: " + result);
}
else
{
Console.WriteLine("변환 실패");
}
이와 같은 방식으로 *float.TryParse()* 도 숫자 형식의 문자열을 float 타입으로 안전하게 변환합니다. int뿐만 아니라 다양한 숫자 타입에 대해 TryParse() 메서드를 사용할 수 있습니다.
Parsing 없이 Enum 값을 사용하는 경우
Parsing 없이 Enum 값을 사용하는 경우, 우리는 보통 정수 값으로 변환해서 사용합니다. 예를 들어, Color.Red를 int로 변환하는 방법입니다. 이 방법은 간단하고 직관적으로 보일 수 있지만, 형변환을 통해 값을 다루기 때문에 코드의 가독성이나 안정성이 떨어질 수 있습니다.
형변환을 통한 접근
enum Color
{
Red,
Green,
Blue
}
int redValue = (int)Color.Red; // 형변환을 통해 정수값으로 얻음
이 방식은 Enum 값들을 정수형으로 변환하고, 그 정수값을 다른 코드에서 사용할 때 유용할 수 있습니다. 예를 들어, 배열이나 다른 데이터 구조의 인덱스로 사용할 때 이런 방식이 필요할 수 있습니다. 하지만, 이런 방식은 문자열에서 Enum으로의 매핑과 같은 명시적인 변환을 수동으로 처리해야 하기 때문에 코드가 덜 직관적이고, 타입 안전성을 보장할 수 없습니다.
Enum 값을 Parsing 하여 사용하는 경우
예시 : Enum.TryParse()
enum Color
{
Red,
Green,
Blue
}
string input = "Red";
Color color;
bool success = Enum.TryParse(input, out color);
if (success)
{
Console.WriteLine("변환 성공: " + color); // Output: Red
}
else
{
Console.WriteLine("변환 실패");
}
위 코드에서 "Red"라는 문자열은 Color enum 값 중 Red로 변환됩니다. 만약 "Yellow"와 같이 Color enum에 정의되지 않은 값이 입력되면, success는 false가 되어 변환이 실패합니다.
왜 Enum.TryParse() 를 사용하나요?
* 안전한 형 변환 : Enum.TryParse()는 잘못된 문자열을 입력할 경우 예외를 발생시키지 않고, false를 반환하므로, 예외 처리 없이 안전하게 변환할 수 있습니다.
* 유효성 검사 : 사용자가 입력한 값이 enum에 정의된 값과 일치하는지 검사하는 데 유용합니다. 예를 들어, 사용자가 색상을 입력할 때 "Red", "Green", "Blue"만 허용하고, 그 외의 값을 입력하면 처리하지 않도록 할 수 있습니다.
* 가독성 : 문자열을 enum 값으로 변환하는 과정이 명확하고 읽기 쉬운 방식으로 이루어집니다. 이는 타입 안정성을 높여주고 코드의 가독성을 좋게 합니다.
Enum.TryParse() 와 Dictionary 의 연계 사용
Enum.TryParse()를 활용하여 문자열을 enum 값으로 변환한 후, 이를 Dictionary와 연결하여 사용할 수 있습니다. Enum.TryParse()는 정수형 값과 문자열 간의 매핑을 가능하게 해주므로, 이를 Dictionary에서 활용하는 것이 유용합니다.
예시 : Enum.TryParse() 와 Dictionary
enum Color
{
Red,
Green,
Blue
}
Dictionary<Color, string> colorDescriptions = new Dictionary<Color, string>()
{
{ Color.Red, "This is red." },
{ Color.Green, "This is green." },
{ Color.Blue, "This is blue." }
};
string input = "Red";
Color color;
if (Enum.TryParse(input, out color))
{
if (colorDescriptions.ContainsKey(color))
{
Console.WriteLine(colorDescriptions[color]); // Output: This is red.
}
}
else
{
Console.WriteLine("Invalid color.");
}
이 예시에서는, *Enum.TryParse()* 로 입력받은 "Red" 문자열을 Color.Red로 변환한 후, 해당 enum 값 Dictionary 에서 검색하여 관련 설명을 출력하는 방식입니다. *Enum.TryParse()* 는 타입 안전성을 제공하면서 Dictionary와 함께 잘 활용될 수 있습니다.
마무리
* 형변환 없이 Enum 값을 사용하는 방식은 간단하지만, 타입 안전성을 보장하지 않고, 명시적이지 않은 접근이므로 가독성이 떨어질 수 있습니다.
* Enum.TryParse() 는 문자열을 Enum으로 변환하여 명시적이고 타입 안전한 방식으로 사용할 수 있습니다. 이 방법을 통해 유효성 검사가 가능하며 Dictionary와 연결하여 더욱 안전하고 직관적인 코드를 작성할 수 있습니다.
* Enum.TryParse()와 Dictionary 의 결합은 타입 안전성을 보장하면서 문자열 입력을 enum 값으로 안전하게 처리하고, 해당 값에 맞는 데이터를 효율적으로 조회하는 방법입니다. 이는 게임에서 상태 관리나 사용자 입력 처리 시에 매우 유용한 패턴입니다.
'C#' 카테고리의 다른 글
하드코딩으로 구현한 간단한 퀘스트 분기 처리 (0) | 2025.05.02 |
---|---|
Dictionary 를 배열처럼 접근할 때 주의사항 (0) | 2025.05.02 |
이벤트 관리를 위한 설계 제안 (0) | 2025.04.30 |
Unity 에서 Singleton 클래스에 Instance로 접근하는 이유 (0) | 2025.04.30 |
속성은 컴파일 단계에서 변수를 자동 생성합니다 (0) | 2025.04.28 |