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