연습 - TryParse() 메서드 검사
- 12분
데이터로 작업할 때 문자열 데이터를 숫자형 데이터 형식으로 변환해야 하는 경우가 있습니다. 앞 단원에서 배웠듯이 문자열 데이터 형식은 숫자가 아닌 값을 저장할 수 있기 때문에 string
에서 숫자 데이터 형식으로 변환할 경우 런타임 오류가 발생할 가능성이 있습니다.
예를 들어, 다음 코드는
string name = "Bob";
Console.WriteLine(int.Parse(name));
이는 다음과 같은 예외를 발생시킵니다.
System.FormatException: 'Input string was not in a correct format.'
형식 예외를 방지하려면 대상 데이터 형식에서 TryParse() 메서드를 사용합니다.
TryParse() 사용
TryParse() 메서드는 다음과 같은 몇 가지 작업을 동시에 수행합니다.
- 문자열을 주어진 숫자 데이터 형식으로 구문 분석하려고 시도합니다.
- 성공하면 다음 섹션에서 설명하는 out 매개 변수에 반환된 값을 저장합니다.
- 또한 작업이 성공 또는 실패했음을 나타내는
bool
을 반환합니다.
부울 반환 값을 사용하여 계산을 수행하는 등 값에 대해 조치를 취하거나 구문 분석 연산이 성공하지 못한 경우 메시지를 표시할 수 있습니다.
참고
이 연습에서는 int
데이터 형식을 사용하지만 모든 숫자형 데이터 형식에서 비슷한 TryParse()
메서드를 사용할 수 있습니다.
Out 매개 변수
메서드는 값을 반환하거나 “void”를 반환할 수 있습니다. 후자의 경우 어떤 값도 반환하지 않음을 뜻합니다. 메서드는 입력 매개 변수처럼 정의되지만 out
키워드를 포함하는 out
매개 변수를 통해 값을 반환할 수도 있습니다.
TryParse()를 사용하여 문자열을 int로 변환
//
줄 주석 연산자를 삭제하거나 사용하여 이전 연습의 모든 코드를 주석 처리합니다.다음과 같이 Visual Studio Code 편집기에서 코드를 업데이트합니다.
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }
다음 코드 줄을 검사합니다.
if (int.TryParse(value, out result))
out
매개 변수를 갖는 메서드를 호출할 때는 변수 앞에 값을 저장할 키워드out
을 사용해야 합니다.out
매개 변수는 코드result
(int.TryParse(value,
out result
의)
변수에 할당됩니다. 그런 다음 변수out
를 사용하여 나머지 코드에서result
매개 변수에 포함된 값을 사용할 수 있습니다.int.TryParse()
메서드는true
변수string
를value
로 성공적으로 변환한 경우int
를 반환합니다. 그렇지 않으면false
를 반환하게 됩니다. 따라서 이 문을if
문 안에 넣고, 그에 따라 판단 로직을 수행합니다.변환된 값은
int
변수result
에 저장됩니다.int
변수result
는 이 코드 줄 전에 선언되고 초기화되므로 문과if
문에 속하는 코드 블록 ‘안에서’와 ‘밖에서’ 모두 액세스할 수 있습니다.out
키워드는TryParse()
메서드가 기존 방법(반환 값으로)으로만 값을 반환하지 않고 이 양방향 매개 변수를 통해 출력도 전달한다는 것을 컴파일러에 지시합니다.코드를 실행하면 다음과 같은 출력이 표시됩니다.
Measurement: 102
구문 분석된 int
를 코드의 뒷부분에서 사용
이전에 선언된
result
변수가out
매개 변수로 채워지고 나중에 코드에서도 사용할 수 있음을 보여 주려면 Visual Studio Code 편집기에서 다음과 같이 코드를 업데이트합니다.string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");
Visual Studio Code 파일 메뉴에서 저장을 선택합니다. 코드를 빌드하거나 실행하기 전에 Program.cs 파일을 저장해야 합니다.
탐색기 패널에서 TestProject 폴더 위치에서 터미널을 열려면 TestProject를 마우스 오른쪽 단추로 클릭한 다음 통합 터미널에서 열기를 선택합니다. 터미널 패널이 열려 있어야 하고 터미널이 TestProject 폴더 위치에 열려 있음을 보여 주는 명령 프롬프트를 포함해야 합니다.
터미널 명령 프롬프트에서 코드를 실행하려면 dotnet run을 입력한 다음, Enter 키를 누릅니다.
참고
“실행할 프로젝트를 찾을 수 없습니다.”라는 메시지가 표시되면 터미널 명령 프롬프트에 예상되는 TestProject 폴더 위치가 표시되는지 확인합니다. 예:
C:\Users\someuser\Desktop\csharpprojects\TestProject>
다음 출력이 표시됩니다.
Measurement: 102 Measurement (w/ offset): 152
이전 샘플
Console.WriteLine($"Measurement (w/ offset): {50 + result}");
의 마지막 코드 줄을 검사합니다.result
변수는 if 문 외부에서 정의되므로 나중에 코드에서 액세스할 수 있습니다.
문자열 변수를 구문 분석할 수 없는 값으로 수정
마지막으로 TryParse()
에 의도적으로 int
로 변환할 수 없는 잘못된 값을 지정하는 다른 시나리오를 살펴보겠습니다.
첫 번째 코드 줄을 수정하여 변수
value
를 다른 값으로 초기화합니다.string value = "bad";
마지막 코드 줄을 수정하여 결과가 0보다 큰지 확인한 다음 두 번째 메시지가 출력되도록 합니다.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
이제 전체 코드 예제는 다음 코드와 일치해야 합니다.
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
코드 파일을 저장한 다음 Visual Studio Code를 사용하여 코드를 실행합니다. 결과는 다음과 같습니다.
Unable to report the measurement.
이전 샘플에 추가된 마지막 두 줄의 코드를 검사합니다.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
result
는if
문 외부에서 정의되므로result
는 코드 블록 외부의 코드에서 나중에 액세스할 수 있습니다. 따라서result
+ 오프셋을 출력으로 작성하기 전에,result
가 0보다 큰 값인지 확인해야 합니다. 0보다 큰result
값을 확인하면Unable to report the measurement.
메시지 다음에 오프셋 값이 출력되는 것을 방지할 수 있습니다.
요약
TryParse()
메서드는 유용한 도구입니다. 다음과 같은 사항을 기억하세요.
- 문자열을 숫자형 데이터 형식으로 변환할 때
TryParse()
를 사용합니다. TryParse()
는 변환이 성공적이면true
를 반환하고 성공적이지 않으면false
를 반환합니다.- out 매개 변수는 값을 반환하는 메서드의 보조 수단을 제공합니다. 이 경우
out
매개 변수는 변환된 값을 반환합니다. out
매개 변수를 정의한 메서드에 인수를 전달할 때 키워드out
을 사용합니다.