어서와 Java는 처음이지! 제14장 오류처리하기.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
7 월 12 일 실습 StockQuoteClient.java MarketClient.java.
제 3 장 반복문, 배열, 예외처리 1 명품 JAVA Programming. for( 초기문 ; 조건식 ; 반 복후작업 ) {.. 작업문.. }  for 키 워드    for 문의 구성 초기문 조건 식 작업문 반복 후작업 true false for 문이 실행한.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
10. 예외 처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
10장 예외 Lab 10-1.
5 익셉션 처리.
[INA470] Java Programming Youn-Hee Han
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
Power Java 제4장 자바 프로그래밍 기초.
8장 자바 입출력.
7장 배열 ②.
Lesson 5. 레퍼런스 데이터형.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 9. 예외처리.
Lesson 6. 형변환.
5장. 참조 타입.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
C++ Espresso 제12장 템플릿.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
Chapter 10 예외 처리와 파일 입출력 01 예외 처리 02 표준 입출력 03 파일 입출력 예제 모음 요약 연습문제.
14. 예외처리.
25강 예외처리 - 예외란? - 예외처리의 필요성 - 예외처리 문법 (try ~ catch) - 예외처리 문법 (throws)
자바 5.0 프로그래밍.
10장. 예외처리.
자바 5.0 프로그래밍.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
Lesson 4. 수식과 연산자.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
2장. 변수와 타입.
컴퓨터공학실습(I) 3주 인공지능연구실.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
C++ Espresso 제11장 예외 처리와 형변환.
JA A V W. 06.
[ 단원 04 ] 반복과 배열.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
어서와 C언어는 처음이지 제21장.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
프로그래밍 개론 Ⅰ 제 1장 . 서론 ②.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
7 생성자 함수.
Presentation transcript:

어서와 Java는 처음이지! 제14장 오류처리하기

디버깅 우리가 사는 세상은 완벽하지 않다!

오류 메시지를 분석한다. 오류 메시지에서 많은 내용을 알 수 있다.

디버깅 디버거를 사용하면 프로그램에서 쉽게 오류를 감지하고 진단할 수 있다. 디버거는 중단점을 설정하여서 프로그램의 실행을 제어할 수 있으며 문장 단위로 실행하거나 변수의 값을 살펴볼 수 있다.

이클립스에서 디버깅

이클립스에서 디버깅

이클립스의 디버깅 명령어

예외처리 오류가 발생했을 때 오류를 사용자에게 알려주고 모든 데이터를 저장하게 한 후에 사용자가 우아하게(gracefully) 프로그램을 종료할 수 있도록 하는 것이 바람직하다

예외란? 예외(exception): 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류 (예) 0으로 나누는 것과 같은 잘못된 연산이나 배열의 인덱스가 한계를 넘을 수도 있고, 디스크에서는 하드웨어 에러가 발생할 수 있다.

try-catch 블록

예외의 예 public class BadIndex { public static void main(String[] args) { int[] array = new int[10]; for (int i = 0; i < 10; i++) array[i] = 0; int result = array[12]; System.out.println("과연 이 문장이 실행될까요?"); } 실행되지 않음!

try-catch 블록으로 예외 처리 public class BadIndex2 { public static void main(String[] args) { int[] array = new int[10]; for (int i = 0; i < 10; i++) array[i] = 0; try { int result = array[12]; } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열의 인덱스가 잘못되었습니다."); } System.out.println("과연 이 문장이 실행될까요?");

try/catch 블록에서의 실행 흐름

finally 블록

try-with-resources 문장 try-with-resources 문장은 Java SE 7버전부터 추가되었다.

예제 ArrayList<String> list = new ArrayList<String>(); list.add(“item1”); list.add(“item2”); list.add(“item3”); try (PrintWriter output = new PrintWriter("myoutput.txt")) { for (String s : list) { output.println(s.toLowerCase()); }

예외의 종류

예외의 종류

다형성과 예외 다형성의 원칙에 따라 상위 클래스의 참조 변수는 하위 클래스의 객체를 참조할 수 있다. 특히 이것은 catch 블록에서 예외를 잡을 때 유용하다.

다형성과 예외 try { getInput(); // 예외를 발생하는 메소드 } catch(NumberException e) { catch(Exception e) { //Exception의 모든 하위 클래스를 잡을 수 있으나 분간할 수 없다.!

다형성과 예외 try { getInput(); } catch(TooSmallException e) { catch(NumberException e) { //TooSmallException을 제외한 나머지 예외들이 잡힌다. try { getInput(); } catch(NumberException e) { //모든 NumberException이 잡힌다. catch(TooSmallException e) { //아무 것도 잡히지 않는다!

예외와 메소드 throws를 사용하여, 다른 메소드한테 예외 처리를 맡길 수 있다.

예제 public void writeList() throws IOException { PrintWriter = new PrintWriter(new FileWriter("outfile.txt")); for (int i = 0; i < SIZE; i++) out.println("배열 원소 " + i + " = " + list[i]); out.close(); }

에외를 처리하는 절차 어떤 메소드 안에서 예외가 발생하면 런타임 시스템은 그 메소드 안에 예외 처리기가 있는 지를 살핀다. 만약 그 자리에 예외 처리기가 없다면 호출 스택(call stack)에 있는 상위 메소드를 조사하게 된다.

LAB: 예외 처리하기 다음 코드의 예외를 처리하여 보자. public class Test { public static void main(String[] args) { System.out.println(readString()); } public static String readString() { byte[] buf = new byte[100]; System.out.println("문자열을 입력하시오:"); System.in.read(buf); return new String(buf); Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type IOException at Test.readString(Test.java:9) at Test.main(Test.java:3)

SOLUTION import java.io.IOException; public class Test { public static void main(String[] args) { try { System.out.println(readString()); } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } public static String readString() throws IOException { byte[] buf = new byte[100]; System.out.println("문자열을 입력하시오:"); System.in.read(buf); return new String(buf);

에외 생성하기

예외는 throw 문장으로 생성된다. 어떤 메소드도 throw 문장을 사용하여서 예외를 생성할 수 있다. throw 문장은 하나의 인수만을 요구하는데 바로 Throwable 객체이다.

예제 public Object pop() { Object obj; if (size == 0) { throw new EmptyStackException(); } ... return obj;

예외 처리의 장점 오류 처리 코드를 정상적인 코드와 분리할 수 있다. 동일한 코드를 예외 처리를 사용하지 않는 경우와 예외 처리를 사용하는 경우로 분리하여 비교해보자.

예외 처리를 사용하지 않는 경우 errorCodeType readFile() { int errorCode = 0; 파일을 오픈한다; if (theFileIsOpen) { 파일의 크기를 결정한다; if (gotTheFileLength) { 메모리를 할당한다; if (gotEnoughMemory) { 파일을 메모리로 읽는다; if (readFailed) { errorCode = -1; } } else { errorCode = -2; errorCode = -3; ...

예외 처리를 사용하는 경우 void readFile() { try { 파일을 오픈한다; 파일의 크기를 결정한다; 메모리를 할당한다; 파일을 메모리로 읽는다; 파일을 닫는다; } catch (fileOpenFailed) { ... } catch (sizeDeterminationFailed) { } catch (memoryAllocationFailed) { } catch (readFailed) { } catch (fileCloseFailed) { }

LAB: 예외 처리하기 다음 코드의 예외를 처리하여 보자. public class ExceptionTest3 { public static void main(String args[]) { int num = Integer.parseInt("ABC"); System.out.println(num); } Exception in thread "main" java.lang.NumberFormatException: For input string: "XYZ" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at numberformat.ExceptionTest3.main(ExceptionTest3.java:6)

SOLUTION public class ExceptionTest3 { public static void main(String args[]) { try { int num = Integer.parseInt("ABC"); System.out.println(num); } catch (NumberFormatException e) { System.out.println("NumberFormat 예외 발생"); }

단언 단언(assertions)은 프로그래머가 현재 시점에서 믿고 있는 내용을 다시 한 번 확인할 때 사용된다.

단언의 형식

예제 import java.util.Scanner; public class AssertionTest { public static void main(String argv[]) { Scanner input = new Scanner(System.in); System.out.print("날짜를 입력하시오: "); int date = input.nextInt(); // 날짜가 1 이상이고 31 이하인지를 검증한다. assert(date >= 1 && date <= 31) : "잘못된 날짜: " + date; System.out.printf("입력된 날짜는 %d입니다.\n", date); }

로깅 로깅(logging)이란 어딘가에 계속하여 기록을 남기는 것이다.

예제 im port java.util.logging.Logger; public class LoggingTest { public static void main(String argv[]) { String filename = "test.dat"; Logger.getGlobal().info(filename + " 파일을 오픈하였음 "); } 8월 15, 2015 1:48:39 오후 LoggingTest main 정보: test.dat 파일을 오픈하였음

Q & A