04 제어문과 예외처리
Download
Report
Transcript 04 제어문과 예외처리
C#
04장. 제어문과 예외처리
04장. 제어문과 예외처리
학습 목표
제어문의 종류와 쓰임새를 이해한다
조건문을 사용하여 문장을 작성한다
반복문을 사용하여 문장을 작성한다
점프문을 사용하여 문장을 작성한다
예외 처리를 이해하고 적절한 예외 처리를 다루어본다
c#
2 / 31
04장. 제어문과 예외처리
목차
•
•
•
•
•
c#
코드 블록과 제어문의 종류
조건문
반복문
점프문
예외처리
3 / 31
04장. 제어문과 예외처리
1. 코드 블록과 제어문의 종류
코드블록 이란
여러 명령문을 논리적으로 결합해야 할 때 중괄호 ({ })를 사용하여 명령문 그룹을 만들어 표
현한다. 이러한 명령문 그룹을 코드 블록(code block)이라고 한다.
코드 블록 안에는 변수를 선언할 수 있고 다른 코드 블록을 포함할 수도 있다
c#
4 / 31
04장. 제어문과 예외처리
1. 코드 블록과 제어문의 종류
using System;
namespace Operators
{
class CodeBlock
{
static void Main(string[] args)
{
int outer;
{
int inner;
outer = 5;
inner = 10;
}
outer = 6;
inner = 12; //오류 ; inner는 위의 블럭안에서 사용되고 소멸됨
}
}
}
c#
5 / 31
04장. 제어문과 예외처리
1. 코드 블록과 제어문의 종류
제어문의 종류
제어문이란 프로그램을 실행할 때는 논리적인 흐름이 필요한데, 이러한 문장의 논리적인 흐
름을 통제해 주는 것. 제어문은 성격에 따라 조건문, 반복문, 그리고 점프문으로 구분할 수
있다
c#
6 / 31
04장. 제어문과 예외처리
2 조건문
조건문은 조건식의 값에 따라 각각에 해당되는 명령문을 수행한다. 조건문에는 if 문과
switch 문이 있다
•If ~ Else 문
-if 문은 조건식에 따라 각각에 해당하는 명령문을 실행한다
if(조건식)
명령문1 ; // 조건식이 참일 때 실행
else
명령문2 ; // 조건식이 거짓일 때 실행
c#
7 / 31
04장. 제어문과 예외처리
2 조건문
•If ~ Else 문의 순서도
if(조건식)
명령문1 ; // 조건식이 참일 때 실행
else
명령문2 ; // 조건식이 거짓일 때 실행
c#
8 / 31
04장. 제어문과 예외처리
2 조건문
•다중 if문
if (point >=0 && point <=100){
if (point >50)
result = “Pass”;
}
else{
Console.WriteLine(“에러:범위를 벗어났습니다.”);
}
If가 여러 번 쓰일 경우는 코드블록{}을 이용하여, 조건식의 참/거짓시의 실행문을 명확히
한다.
c#
9 / 31
04장. 제어문과 예외처리
2 조건문
if 문 예제1
using System;
namespace If_Statement
{
class If_Statement
{
static void Main(string[] args)
{
int age;
bool login = false;
age = 25; // age에 값 할당
if (age > 18)
{
login = true;
Console.WriteLine("당신을 환영합니다");
}
else
{
login = false;
Console.WriteLine("성인만 입장이 가능합니다!");
}
}
}
}
c#
10 / 31
04장. 제어문과 예외처리
2 조건문
if 문 예제2
using System;
else if (point > 70)
{
result = "C";
}
namespace If_Statement2
{
class If_Statement2
{
static void Main(string[] args)
{
int point;
string result;
else if (point > 60)
{
result = "D";
}
else
{
result = "F";
}
point = 82; // point에 82 값 할당
if (point > 90)
{
result = "A";
}
else if (point > 80)
{
result = "B";
}
c#
Console.WriteLine("당신의 점수는 {0}입니다.", point);
Console.WriteLine("그리고 학점은 {0}입니다.", result);
}
}
}
11 / 31
04장. 제어문과 예외처리
2 조건문
•Switch 문
switch(조건변수){
case 값1 :
// 조건변수의 값이 값1과 일치할 때 실행
명령문1 ;
break ;
….
….
case 값n :
// 조건변수의 값이 값n과 일치할 때 실행
명령문n ;
break;
default :
// 어떠한 값도 만족하지 않을 때 실행
명령문z ;
break;
}
c#
12 / 31
04장. 제어문과 예외처리
2 조건문
using System;
namespace Switch_Statement
{
class Switch_Statement
{
static void Main(string[] args)
{
int num = 23;
switch (num % 5)
{
case 1:
Console.WriteLine("나머지의 값은 1입니다.");
break;
case 2:
Console.WriteLine("나머지의 값은 2입니다.");
break;
case 3:
Console.WriteLine("나머지의 값은 3입니다.");
break;
case 4:
Console.WriteLine("나머지의 값은 4입니다.");
break;
default:
Console.WriteLine("5의 배수입니다.");
break;
}
}
}
}
c#
13 / 31
04장. 제어문과 예외처리
2 조건문
switch문에서 점프문을 사용하지 않은 경우
using System;
case 2:
Console.WriteLine("나머지의 값은 2입니다.");
break;
namespace Switch_Statement2
{
class Switch_Statement2
{
static void Main(string[] args)
{
int num = 23;
case 3:
Console.WriteLine("나머지의 값은 3입니다.");
// 에러 : 모든 case 문의 블록 끝에는 break 문,
//
return 문, throw 문, goto 문 등이 와야 한다.
case 4:
Console.WriteLine("나머지의 값은 4입니다.");
break;
switch (num % 5)
{
case 1:
Console.WriteLine("나머지의 값은 1입니다.");
break;
default:
Console.WriteLine("5의 배수입니다.");
break;
}
}
}
}
c#
14 / 31
04장. 제어문과 예외처리
2 조건문
조건변수에 적절하지 못한 형식을 사용한 경우
using System;
namespace Switch_Statement3
{
class Switch_Statement3
{
static void Main(string[] args)
{
double number = 3.14;
switch (number) // 에러: 조건변수에 double형을 사용할 수 없다.
{
case 3.14:
Console.WriteLine(3.14);
break;
case 3.15:
Console.WriteLine(3.15);
break;
}
}
}
}
c#
15 / 31
04장. 제어문과 예외처리
3 반복문
While문
while 문은 조건식을 만족하는 동안, 반복적으로 명령문을 실행한다.
조건식이 false가 되야지만, while{}구문을 빠져 나간다
while (조건식) {
명령문1 ;
명령문2 ;
…
명령문n ;
}
c#
16 / 31
04장. 제어문과 예외처리
3 반복문
while 문 예제
using System;
namespace While_Statement
{
class While_Statement
{
static void Main(string[] args)
{
int i = 0;
while (i < 10)
{
Console.Write("{0} ", i);
i++;
}
Console.WriteLine();
}
}
}
c#
17 / 31
04장. 제어문과 예외처리
3 반복문
Do While문
Do While문은 명령문을 먼저 실행한 후에 조건을 검색해야 하는 경우에 사용한다
do {
명령문1 ;
명령문2 ;
…
명령문n ;
} while (조건식) ;
c#
18 / 31
04장. 제어문과 예외처리
3 반복문
앞의 예제를 do … while 문으로 수정한 예제
using System;
namespace DoWhile_Statement
{
class DoWhile_Statement
{
static void Main(string[] args)
{
int i = 0;
do
{
Console.Write("{0} ", i);
i++;
} while (i < 10);
Console.WriteLine();
}
}
}
c#
19 / 31
04장. 제어문과 예외처리
3 반복문
for 문
while 문과 do … while 문이 조건에 따라 반복 수행 한다면 for 문은 반복 회수가 먼저
결정되었을 때 사용한다
•for 문 문법
for(초기값; 조건식; 증감){
명령문1 ;
명령문2 ;
…
명령문n ;
}
c#
20 / 31
04장. 제어문과 예외처리
3 반복문
앞의 예제를 for 문으로 수정한 예제
using System;
namespace While_Statement
{
class While_Statement
{
static void Main(string[] args)
{
int i = 0;
while (i < 10)
{
Console.Write("{0} ", i);
i++;
}
Console.WriteLine();
}
}
}
c#
21 / 31
04장. 제어문과 예외처리
3 반복문
블록 밖에서 블록 내의 i 변수 사용
using System;
namespace For_Statement2
{
class For_Statement2
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0} ", i);
}
// 에러 : 변수 i는 for 문 안에서만 유효하다.
Console.WriteLine(i);
}
}
}
c#
22 / 31
04장. 제어문과 예외처리
3 반복문
같은 코드 블록 내에 I 변수 2번 선언
using System;
namespace For_Statement3
{
class For_Statement3
{
static void Main(string[] args)
{
int i;
for (int i = 0; i < 10; i++)
{
//에러: 이미 변수 i가 선언되었다.
Console.Write("{0} ", i);
}
}
}
}
c#
23 / 31
04장. 제어문과 예외처리
3 반복문
foreach문
일련의 데이터를 하나의 객체에 저장하고자 할 때 배열이나 컬렉션 객체를 이용한다.
foreach 문은 이런 배열과 컬렉션 객체 내의 데이터에 순차적으로 접근할 때 사용된다
c#
24 / 31
04장. 제어문과 예외처리
3 반복문
foreach문 예제
using System;
using System.Collections;
class foreachTest
{
static void Main(string[] args)
{
ArrayList numbers = new ArrayList();
for (int i = 0; i < 10; i++)
{
numbers.Add(i);
}
// foreach 문
foreach (int number in numbers)
{
Console.Write("{0} ", number);
}
Console.WriteLine();
}
}
c#
25 / 31
04장. 제어문과 예외처리
4 점프문
goto문
goto 문은 프로그램 실행의 제어권을 이동 시킨다.
goto 문이 지시하는 레이블은 반드시 존재해야 하고 goto 문이 접근 가능한 위치여야
한다. goto 문은 사용된 곳보다 상위 코드 블록으로는 제어권을 이동 할 수 있지만 하위
코드 블록으로는 제어권을 이동할 수 없다. goto 문을 사용하면 자칫 프로그램의 흐름
을 혼란스럽게 만들 수 있기 때문에 switch 문 외에는 사용을 자제하는 편이 좋다.
Break, continue문
break 문의 역할은 반복문의 코드 블록밖으로 제어권이 나오게 하는 것이다. 이와 비슷하
지만 continue 문은 제어권을 반복문의 조건식으로 이동시킨다. 문장에서 break 문을 만
나면 반복문(while, do ... while, for, foreach 문)이나 switch 문은 실행을 멈춘다. 이에
반해 continue 문을 만나면 반복문의 조건식을 다시 조사하여 실행여부를 결정한다.
c#
26 / 31
04장. 제어문과 예외처리
4 점프문
continue 문 예제
using System;
namespace Continue_Statement
{
class Continue_Statement
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
if (i % 2 == 1)
continue;
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
}
c#
27 / 31
04장. 제어문과 예외처리
4 점프문
break 문 예제
using System;
namespace Break_Statement
{
class Break_Statement
{
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
if (i % 3 == 0)
break;
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
}
c#
28 / 31
04장. 제어문과 예외처리
5. 예외처리
Try/catch문
프로그램이 실행 중에 에러가 나거나 멈출 수 있는데, 이러한 현상을 통틀어 예외현상
(Exception)이라고 함
예외현상을 사전에 방지하기 위해 예외현상이 발생가능한 지점에 try/catch문을 적용 한다
c#
29 / 31
04장. 제어문과 예외처리
5. 예외처리
Try/catch문 문법
try
{
예외처리가 필요한 구문
}
catch(예외종류)
{
예외현상 발생 시 실행할 명령
}
finally()
{
예외 현상이 발생하는지에 상관없이 항상 실행하는 명령
}
c#
30 / 31
04장. 제어문과 예외처리
5 예외처리
using System;
namespace TryCatch_Statement
{
class TryCatch_Statement
{
static void Main(string[] args)
{
int a, b;
float c = 0;
try/catch finally문 예제
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
try
{
c = a / b;
}
catch (Exception)
{
Console.WriteLine("변수의 값이 올바르지 않습니다.");
Environment.Exit(0);
}
finally
{
Console.WriteLine("프로그램이 실행 되었습니다.");
}
Console.WriteLine("A/B값은 {0}입니다.", c);
}
}
}
c#
31 / 31
04장. 제어문과 예외처리
5 예외처리
보충 자료
• 예외 : 프로그램의 정상적인 흐름을 벗어나게 만드는 잘
못된 조건이나 상태
• 예) 읽을 파일이 없거나, 잘못된 자료 입력
• 예외에 대한 근본적인 처리 방법은 없다.
• 전통적인 예외 처리 방법 : 조건문 이용
• 문제점 : 실제 작업 코드와 예외 처리 작업 코드가 섞여
있으므로 가독성이 떨어진다.
• 조건문이 많아지면 최초 호출한 함수로 리턴 값을 넘기
기 위해서 추가적인 문장이 필요할 수도 있다.
c#
32 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예외 처리의 키
• try : 예외가 발생할 만한 블록을 지정하며 이블록 안에 코드를 작성
한다. 지정한 블록 안에서 예외가 발생하면 try 다음에 이어지는
catch 로 점프하여 예외를 처리한다. 예외가 발생하지 않으면 catch
를 무시하고 다음 명령을 실행한다.
• catch : try에서 발생한 예외를 처리하는 블록이다. 발생한 예외 객
체를 인수로 전달받으며 예외의 종류별로 여러 개의 catch 블록이
올 수 있다. try 블록에서 발생한 예외의 타입에 따라 적절한 catch
블록이 선택된다. 예외를 처리할 필요가 없으면 생략할 수도 있다.
• finally : 예외 발생 여부와 상관없이 반드시 처리해야 하는 블록이다
. 예외가 발생해도 호출되며 그렇지 않아도 호출된다. 중요한 리소
스 해제등
c#
33 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예제1 try 이용
using System;
class CSTest
{
static int[] ar = { 1, 2, 3, 4, 5 };
static int idx = 8;
예외를 처리했기 때문에 메시지만 출
static void Main()
{
력되고 다운되지는 않는다.
try
{
Console.WriteLine(ar[idx]);
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
}
}
c#
34 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예제 2 if 문 이용
using System;
class CSTest
{
static int[] ar = { 1, 2, 3, 4, 5 };
static int idx = 8;
static void Main()
{
if(idx>0 && idx < ar.Length)
{
Console.WriteLine(ar[idx]);
}
else
{
Console.WriteLine("첨자가 틀렷어");
}
}
}
c#
조건문 처리시 한계가 많다.
다음 예제
35 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예제 3 : nested 방법으로 메소드를 호출
using System;
class CSTest
{
static int[] ar = { 1, 2, 3, 4, 5 };
static int idx = 8;
static public void Method1()
{
Method2();
Main() -> Method1()->Method2()
}
static public void Method2()
메서드를 최초로 호출한 곳으로 돌아간다.
{
Console.WriteLine(ar[idx]);
내부에서 예외 발생시 자신을 포함하고 있는 가장 가
}
까운 try 블록을 찾아서 이 블록에 대응되는 catch를
static void Main()
실행시킨다.
{
try
조건문으로 처리시 추가적인 리턴값이 필요
{
Method1();
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
}
}
c#
36 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예제 3 : nested 방법으로 메소드를 호출(if 문)
using System;
class CSTest
{
static int[] ar = { 1, 2, 3, 4, 5 };
static int idx = 8;
static public bool Method1()
{
return Method2();
}
static public bool Method2()
{
if (idx > 0 && idx < ar.Length)
{
Console.WriteLine(ar[idx]);
return true;
}
else
{
return false;
}
}
static void Main()
{
if (Method1() == false)
{
Console.WriteLine("첨자가 틀렷어");
}
}
c#
1. 리턴 타입 bool 로 변경
2. 호출 단계가 많아지면 사용하기 어려움
3. 예외처리 구문(try 사용)은 컴파일러가 이
전 단계를 찾아 점프 하도록 코드를 생성
하므로 단계가 아무리 깊어도 상관없다.
중간 단계의 메서드에서 생성한 지역변수
들로 모두 자동으로 해제됨(스택 풀기)
37 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예외 객체
닷넷의 예외 들은 모두 System.Exception으로부터 파생되며, 발생원인에 따라
서 2가지 종류로 분류된다.
SystemException 은 닷넷이 정의하는 일반적이 예외들이며, 닷넷 런타임에서
실행 중에 이 예외들을 일으킨다.
ApplicationException은 응용 프로그램이 정의하는 고유의 예외이며 사용자가
직접 예외 클래스를 정의할 때 기반 클래스로 사용된다.
c#
38 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
예외 클래스
예외 클래스
설명
IndexOutOfRangeException
배열의 첨자가 유효하지 않다.
DivideByZeroException
0으로 나누기를 하였다.
FormatException
실인수와 형식 인수의 형식이 일치하지 않는다.
NullReferenceException
null인 객체를 참조했다.
InvalidCastException
캐스팅이 맞지 않다.
OutOfMemoryException
메모리가 부족하다
StackOverflowException
스택이 가득 찼다.
OverflowException
산술, 변환 연산 중에 변수의 범위를 벗어났다.
c#
39 / 31
04장. 제어문과 예외처리
5 예외처리(보충자료)
프로퍼티
프로퍼티
타입
설병
Message
string
예외를 설명하는 문자열이다. 원인 및 대책 등
에 가급적 상세한 메시지를 제공해야 한다. 보
통 생성자에서 초기화 한다.
HelpLink
string
예외와 관련된 도움말의 위치를 설명한다. 파
일이거나 또는 웹사이트의 링크이다.
Source
string
오류를 발생시킨 주체의 이름이다. 응용 프로
그램이나 개체의 이름 또는 어셈블리의 이름
이 리턴된다.
TargetSite
MethodBase
예외를 일으킨 메서드를 조사한다
HResult
int
COM 클라이언트에게 전달하기 위한 에러 코
드
StackTrace
string
예외가 발생한 시점의 스택 프레임 정보이다.
호출된 메서드의 목록을 가지며 스택 추적에
사용된다.
InnerException Exception
c#
현재 예외를 발생시킨 이전 예외 객체
40 / 31
04장. 제어문과 예외처리
프로퍼티 이용한 예외 처리 예
using System;
class CSTest
{
static int[] ar = { 1, 2, 3, 4, 5 };
static int idx = 8;
static public void Method1()
{
Console.WriteLine(ar[idx]);
}
static void Main()
{
try
{
Method1();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.Source);
Console.WriteLine(e.TargetSite);
Console.WriteLine(e.StackTrace);
}
}
}
c#
인덱스가 배열 범위를 벗어났습니다.
ConsoleApplication4
Void Method1()
위치: CSTest.Method1() 파일
C:\Csharp\Chap12\Project3\ConsoleApplic
ation4\ConsoleApplication4\Program.cs:줄 9
위치: CSTest.Main() 파일
C:\Csharp\Chap12\Project3\ConsoleApplic
ation4\ConsoleApplication4\Program.cs:줄 15
계속하려면 아무 키나 누르십시오 . . .
41 / 31
04장. 제어문과 예외처리
MSDN의 예외 관련 문서 내용 (Convert.ToInt32 메서드(String))
2 가지 예외
* Convert.ToInt32(Double)은 오버플로우 예외만 표기 되어 있다.
c#
42 / 31
04장. 제어문과 예외처리
MSDN의 예외 관련 문서 내용 (Convert.ToInt32 메서드(Double))
1 가지 예외
항상 안전한 동작을 하기 위해서는 호출문을 try 로 둘러싸고 발생 가능
한 모든 예외에 대해 catch문을 나열해 놓아야 한다.
단, 입력값의 포맷이 정확하고 오버플로우가 발생할 가능성이 전혀 없으면
처리를 생략한다.
c#
43 / 31
04장. 제어문과 예외처리
throw 문
라이브러리의 메서드 실행 중에 예외가 발생하면 개발자가 직접
예외 객체를 생성하여 던질 수 있다.
던져진 예외는 이어지는 catch 문 또는 가장 가까운 catch문에서
받아 처리가 된다.
c#
44 / 31
04장. 제어문과 예외처리
using System;
회원을 추가하는 메서드에서 throw 사용
class CSTest
{
static void AddKim(string Kim)
{
생성자를 이용하여 예외 발생 이
if (Kim[0] != '김')
유를 설명하는 문자열을 전달
{
throw new FormatException("김가만 등록할 수 있다.");
}
Console.WriteLine(Kim + "등록 완료");
}
static void Main()
{
try
{
AddKim("김서방");
AddKim("오서방");
}
catch
(FormatException e)
{
Console.WriteLine(e.Message);
c#
}
45 / 31
04장. 제어문과 예외처리
using System;
상세한 예외 설명 추가
class NotKimException : ApplicationException
{
public NotKimException(string message) : base(message) { }
public string ErrorName;
}
* 상속과 멤버 추가 이용
class CSTest
{
static void AddKim(string Kim)
{
if (Kim[0] != '김')
{
NotKimException NotKim = new NotKimException("김가만 등록할 수 있다.");
NotKim.HelpLink = "김가 동호회 규약.txt";
NotKim.Source = "CSTest.cs";
NotKim.ErrorName = Kim;
throw NotKim;
}
Console.WriteLine(Kim + "등록 완료");
}
static void Main()
{
try
{
AddKim("김서방");
AddKim("오서방");
}
catch (NotKimException e)
{
Console.WriteLine(e.Message + e.ErrorName[0] + "가는 등록안됨");
}
}
c#
46 / 31
04장. 제어문과 예외처리
다중 예외 처리
using System;
try 아래쪽에 발생 가능한 모든 예외에 대해 catch
문을 나열하고 발생한 예외에 따라 각각 다르게 처
리한다. 3개의 예외 발생 가능 예제
class CSTest
{
static void Main()
{
int input;
int[] ar = { 1, 2, 3, 4, 5 };
int t;
for (; ; )
{
try
{
Console.Write("첨자를 입력하시오(끝낼 때 100) : ");
input = Convert.ToInt32(Console.ReadLine());
if (input == 100) break;
Console.WriteLine("ar[{0}] = {1}", input, ar[input]);
t = 8 / input;
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine("첨자가 틀렸어 : " + e.Message);
}
catch (DivideByZeroException e)
{
Console.WriteLine("0으로 나누지 마 : " + e.Message);
}
catch (FormatException e)
{
Console.WriteLine("숫자만 입력해야지 : " + e.Message);
}
c# }
47 / 31
04장. 제어문과 예외처리
다중 예외 처리의 순서(위에서 아래로)
using System;
class CSTest
{
static void Main()
{
try
{
int i = 0;
int k = 5 / i;
}
catch (DivideByZeroException e)
{
Console.WriteLine("0으로 나누지 마십시오. : " + e.Message);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
catch
{
Console.WriteLine("이유는 모르겠지만 하옇든 잘못되었습니다.");
}
}
}
c#
48 / 31
04장. 제어문과 예외처리
중첩 예외 처리 예
using System;
class CSTest
{
static void Main()
{
short Price, Num, Total = 0;
try
{
Console.Write("단가를 입력하시오 : ");
Price = Convert.ToInt16(Console.ReadLine());
Console.Write("개수를 입력하시오 : ");
try
{
Num = Convert.ToInt16(Console.ReadLine());
checked { Total = (short)(Price * Num); }
}
catch (OverflowException e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("총 가격은 {0}입니다.", Total);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
c#
49 / 31
04장. 제어문과 예외처리
닷넷이 프로그램 전체를 거대한 try 문으로 감싸고 있고 모든 예외에 대해
정보 출력 후 종료하는 식으로 처리한다.
c#
50 / 31
04장. 제어문과 예외처리
요약
• 프로그램의 흐름을 통제하는 제어문의 성격에 따라 조건문(if문,
switch문), 반복문(while문, do…while문, for문, foreach문)과 점프
문(break문, continue문, goto문)이 있다.
• 조건문은 조건식 또는 조건 값에 따라 해당되는 명령문을 실행하는
데 유용하며, if 문은 조건식을 계산해서 참,거짓의 결과에 따라 두 가
지 문장 중에 하나를 실행한다.
• switch문에 사용되는 수식은 단순한 자료형이거나 string, enum형이
가능하며, 수식을 평가한 값은 case문에 의해서 구분된다.
c#
51 / 31
04장. 제어문과 예외처리
요약
• 반복문은 조건식에 따라 해당 명령문을 반복적으로 수행한다. 반복할
조건식이 항상 참인 경우에는 무한루프에 빠지기 때문에 탈출 조건을
확인해야 한다.
• for문은 반복횟수가 정해져 있는 경우 명령문을 반복 수행한다. 그리
고 foreach문은 컬렉션이나 배열의 멤버에 접근해서 명령문을 수행
한다.
• while문은 초기에 조건문을 판단해서 참이면 반복, 거짓이면 while문
밖으로 탈출한다. Do … while 문은 무조건 한번 실행하며, 마지막에
조건문을 판단해서 반복과 탈출 여부를 결정한다.
c#
52 / 31
04장. 제어문과 예외처리
요약
• 점프문은 프로그램 실행의 제어권을 목적에 따라 이동시키는 데 사용
한다. goto문을 사용하면 자칫 프로그램의 흐름을 혼란스럽게 만들
수 있기 때문에 switch문 외에는 사용을 자제하는 편이 좋다.
• 프로그램에서 break문을 만나면 반복문(while문, do문, for문,
foreach문)이나 switch문은 실행을 멈춘다. 이에 반해 continue문을
만나면 반복문의 조건식을 다시 조사해서 실행 여부를 결정한다.
• 예외처리문은 프로그램의 예상치 못한 오류를 방지하는 데 사용하며,
try/catch finally문이 이에 해당한다.
c#
53 / 31