반응형
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace 예외처리 { // 예외 처리 !! // 예외 ?? 에러?? //ex) 학년을 입력하세요?? : 5 // 1,2,3,4 // 예외 ?? 예상하는 결과에서 벗어난 결과 !! // 1) 분기문을 이용한 예외처리 !! /*if( 1 || 2 || 3|| 4) { }*/ /* switch (switch_on) { default: // 해당하는 케이스가 존재하지 않는 경우 !! } */ // try ~ catch ~ finaly 구조화된 예외처리 !! // 예외는 실행시간에 발생하는 오류이다. // try구문은 중첩이 가능하다 !!! // 1) 가독성이 떨어진다 !! // 2) 프로그램 코드와 예외처리 구문이 함께 공존한다 !! /* int Result = 10; if( Result == 1) goto Failed; f( Result == 2) goto Failed; if( Result == 3) goto Failed; if( Result == 4) goto Failed; Failed : switch () { // 예외처리구문 !! default: } */ class Program { static void Main(string[] args) { /* int no = 100; try { // 실제 우리가 구현하고자하는 로직 !! int Result = no / 3; } catch { //예외 처리 코드 !! Console.WriteLine("0으로 값을 나누는 것은 아무 의미가;;"); } */ FileInfo fi = new FileInfo("ABC.txt"); try { fi.Open(FileMode.Open); int len = (int)fi.Length; // 파일의 크기 !! } // 상위타입의 Exception일수록 아래에 구현하자 !! catch (IOException ie) { Console.WriteLine(ie.Message); } catch (Exception e) { Console.WriteLine(e.Message); } // finally : try ~catch 구문이 끝난후 반드시 실행되어야하는 코드들이다 !! // Try ~catch에서의 실행결과에 관계 없이 무조건 실해되어야 하는 코드들 !!! // catch 블록이 존재하는 finally보다 먼저 실행된다 !! // try~catch에서 발생한 리소스들의 정리 작업을 finally에서 수행한다 !! finally { fi.Delete(); } } } }