'이것이 C#이다 개정판'의 chapter 5를 정리한 글입니다.
Switch문(Statement)
C#에서의 'Switch 문'은 오로지 정수 형식 하나만 지원하는 C와 C++과 다르게 문자열 형식과 데이터 형식 또한 지원합니다.
[예시]
using System;
using static System.Console;
namespace Switch
{
class MainApp
{
static void Main(string[] args)
{
object obj = null;
string s = ReadLine();
if (int.TryParse(s, out int out_i))
obj = out_i;
else if (float.TryParse(s, out float out_f))
obj = out_f;
else
obj = s;
switch (obj)
{
case int i:
WriteLine($"{i}는 int 형식입니다.\n");
break;
case float f:
WriteLine($"{f}는 float 형식입니다.\n");
break;
default:
WriteLine($"{obj}(은)는 모르는 형식입니다.\n");
break;
}
}
}
}

[ TryParse( ) ]
TryParse( ) 메서드는 문자열을 특정 데이터 타입으로 변환하려고 시도합니다.
변환이 성공하면 true를 반환하고, 실패하면 false를 반환합니다.
데이터_타입.TryParse(변수명, out 데이터_타입 변수명)
메서드의 원형에서 'out 데이터_타입 변수명'은 out 매개변수로 불립니다.
out 매개변수는 변환된 값을 저장하기 위해 사용되며, 변환이 실패하면 이 값은 해당 타입의 기본 값이 됩니다.
※ 기본값은 out 매개변수의 데이터 타입마다 다릅니다.
정수형 : 0 / 실수형 : 0.0 / 문자형 : '₩0' (널 문자) / 논리형 : false / 참조형 : null
TryParse( ) 메서드는 변환이 실패해도 예외를 발생시키지 않으므로, 안전하게 사용이 가능합니다.
그렇기에 사용자 입력 등 불확실한 데이터 변환에 사용 하는 것이 적합한 메소드입니다.
[ Parse( ) ]
Parse( )메서드는 문자열을 특정 데이터 타입으로 변환합니다.
데이터_타입.Parse(변수명)
Parse( )메서드는 변환이 실패할 경우, 'FormatException' 예외를 발생시킵니다.
반환이 실패할 경우 예외가 발생되기 때문에, 신뢰할 수 있는 데이터 변환에 사용하는 것이 적합한 메소드입니다.
[ when절 ]
when절은 switch 문과 catch 문 등에서 조건부 로직을 추가하는데 사용되는 기능입니다.
when절을 사용하여, 특정 조건을 만족할 때만 해당 케이스를 실행하거나 특정 예외를 처리할 수 있습니다.
[예시 : switch문에서 when절 활용]
switch (obj)
{
case int i:
WriteLine($"{i}는 int 형식입니다.\n");
break;
case float f when f >= 0 : // obj가 float 형식이며, 0보다 크거나 같은 경우
WriteLine($"{f}는 양의 float 형식입니다.\n");
case float f: // obj가 float 형식이며 0보다 작은 경우
WriteLine($"{f}는 음의 float 형식입니다.\n");
break;
default:
WriteLine($"{obj}(은)는 모르는 형식입니다.\n");
break;
}
위의 'case float f :'는 obj에 대해 0보다 작은 경우라는 조건은 없지만, 위의 'when 절'을 통해 조건을 추가하였기 때문에 아래에서는 자연스럽게 조건이 추가됐다고 생각하시면 됩니다.
[기본구조 : case문에서 when절 활용]
try
{
// 예외가 발생할만한 코드
}
catch (ExceptionType ex) when (조건)
{
// 조건이 참일 때 실행할 코드
}
Switch식(Expression)
'switch 식'은 switch 문을 더욱 간단하게 표현할 수 있습니다. switch식 또한 C와 C++에서 사용할 수 없습니다.
- case : → =>
- break; → ,
- break; 사용이 불필요해지며, 각 케이스는 ,(컴마)로 구분합니다.
- default → _
int input = Convert.ToInt32(Console.ReadLine());
// 1의 자리를 버립니다. 예) 92 -> 90, 87 -> 80
int score = (int)(Math.Truncate(input/10.0) * 10);
string grade = score switch
{
90 => "A",
80 => "B",
70 => "C",
60 => "D",
_ => "F"
};
반복문
- while
- do while
do
{
반복실행할_코드_블록 // 이 코드 블록은 최초 한 번은 무조건 실행됩니다.
}
while ( 조건식 ); // do while문은 while 문과 다르게 세미콜론(;)을 반드시 붙여줘야 합니다.
- for
- foreach
foreach(데이터형식 변수명 in 배열_또는_컬렉션)
{
코드블록
}
[무한 루프]
[ for문의 무한 루프 ]
for( ; ; )
[ while문의 문한 루프 ]
while( true )
// while ( 1 )과 동일
점프문
- break
- 실행 중인 반복문이나 switch 문을 중단하고자 할 때 사용합니다.
- 조건이 충족되는 순간 break 문이 속한 블럭으로부터 빠져나옵니다.
- continue
- 현재 실행되고 있는 반복문의 반복을 건너뛰고자 할 때 사용합니다.
- 조건이 충족되는 순간 continue 문이 속한 블럭으로부터 빠져나옵니다.
for ( int i = 0; i < 5; ++i)
{
if ( i == 3)
continue; // i가 3인 경우 현재 실행 중인 반복을 건너뜁니다.
WriteLine(i);
}
// 출력 결과
// 0, 1, 2, 4
- goto
- 코드 내에 레이블을 정의하여, goto 문을 통해 해당 레이블로 이동할 수 있습니다.
- goto 문을 사용하면 코드의 흐름이 비직관적이 될 수 있어, 가독성이 저하될 수 있습니다. 이는 코드의 유지보수를 어렵게 할 수 있습니다.
- 일반적으로 goto 문을 사용하는 것은 주의를 요하며, 권장되지 않습니다.
하지만, 중첩된 구조에서 에러 처리를 간소하는 상황에서는 유용할 수 있습니다.
using System;
namespace Goto
{
class MainApp
{
static void Main(string[] args)
{
Console.Write("종료 조건(숫자)을 입력하세요. : ");
String input = Console.ReadLine();
int input_number = Convert.ToInt32(input);
int exit_number = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
for (int k = 0; k < 3; k++)
{
if (exit_number++ == input_number)
goto EXIT_FOR; // 조건이 참이면 EXIT_FOR 레이블로 이동합니다.
Console.WriteLine(exit_number);
}
}
}
goto EXIT_PROGRAM; // 위의 goto문이 실행되지 않으면, 해당 goto문에 따라 EXIT_PROGRAM 레이블로 이동합니다.
EXIT_FOR:
Console.WriteLine("\nExit nested for...");
EXIT_PROGRAM:
Console.WriteLine("Exit program...");
}
}
}


- return
- throw
'C#' 카테고리의 다른 글
| [C#] 객체지향 프로그래밍 : 객체, 클래스 (0) | 2025.04.15 |
|---|---|
| [C#] 메소드 (0) | 2025.04.11 |
| [C#] 연산자 (2) | 2025.04.07 |
| [C# 기본 정리 3] 형 변환, Nullable, var, 전역변수, 문자열 (0) | 2025.04.04 |
| [C# 기본 정리 2] 변수, 힙, 데이터 형식, 오버플로우와 언더플로 (0) | 2025.04.03 |