[JAVA+국비교육] 예외 처리(Exception), 네이버 로그인 만들기
by 무작정 개발반응형
2022.01.11(14일 차)
오늘은 드디어 기다리던 예외 처리(Exception handling)를 배운다. 어려울 것으로 예상되지만 파이팅!
오늘의 수업 내용
예외(Exception), 에러(Error)
예외(Exception)
- 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름에 어긋나는 경우
- 개발자가 예외 상황을 미리 예측하여 직접 핸들링 가능
에러(Error)
- 시스템에 어떠한 비정상적인 상황이 발생한 경우
- 주로 JVM에서 발생하며, 예외와 반대로 이를 애플리케이션 코드에서 잡으려고 하면 안 됨.
예외처리 목적
- 예외 발생으로 인한 실행 중인 프로그램의 비정상 종료를 막기 위해
- 개발자에게 알려 코드를 보완할 수 있도록 하기 위해

Java에서는 상속을 이용해 모든 예외를 표현하는데, 모든 예외 클래스는 Throwable의 자손 클래스이다.
try-catch(-finally) 형식
javatry { // 예외가 발생할 가능성이 있는 코드를 구현합니다. } catch (FileNotFoundException e) { // FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다. } catch (IOException e) { // FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다. } finally { // 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현합니다. }
javapackage com.day14; import java.util.Scanner; /* 예외 처리( try - catch 문) Exception */ public class Test2 { public static void main(String[] args) { int num1, num2, result; String oper; Scanner sc = new Scanner(System.in); try { System.out.print("두 개의 수 : "); num1 = sc.nextInt(); num2 = sc.nextInt(); System.out.print("연산자 : "); oper = sc.next(); result = 0; if(oper.equals("+")) { // oper은 String이라 equals로 비교 result = num1 + num2; } else if (oper.equals("-")) { result = num1 - num2; } else if (oper.equals("*")) { result = num1 * num2; } else if (oper.equals("/")) { result = num1 / num2; } System.out.printf("%d %s %d = %d\n", num1, oper, num2, result); //try에서 에러가 발생하면 catch문이 오류를 잡아내고 Exception이 오류처리한 결과를 매개변수 e한테 반환해줌 } catch (NumberFormatException e) { System.out.println("정수를 입력해라"); } catch (ArithmeticException e) { System.out.println("0으로 나눌 수 없습니다."); } catch (Exception e) { //Exception을 가장 위에 쓰면 에러뜸 why ? -> 위로 가면 아래 애들이 할일이 없어짐 System.out.println("넌 그게 숫자로 보이냐~~?"); System.out.println(e.toString());// 이걸 많이쓴다 java.util.InputMismatchException e.printStackTrace(); } finally { System.out.println("언제든지 실행된다."); } System.out.println("catch문 밖...."); } }

예외처리를 사용한 계산기 만들기
- 예외를 의도적으로 발생시키는 방법( 자주 사용)
javapackage com.day14; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 예외를 의도적으로 발생시키는 방법 ( 자주 사용함) 중요!!! public class Test3 { //2 public static String getOper() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String oper = null; //String oper = ""; 위의 방법도 ㄱㅊ지만 보통 이방법으로 쓴다. try { System.out.print("연산자 : "); oper = br.readLine(); // 원래 에러뜨는데 catch문의 exception이 해결해줌 if(!oper.equals("+") && !oper.equals("-") && !oper.equals("*") && !oper.equals("/")) { // 양쪽이 부정이면 && //사용자 정의 오류 - 위 문장이 아니면 오류를 발생시켜라. //사용자 정의를 사용하려면 이 문법을 사용하고 스로우 익셉션. throw new Exception("연산자 입력 오류!!"); //1. 선언 2.위 throws 익셉션이 두번째 } } catch (IOException e) { System.out.println("입력 에러!!"); } return oper; // oper를 반환 } public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num1, num2, result; String oper; try { System.out.print("첫번째 수 : "); num1 = Integer.parseInt(br.readLine()); System.out.print("두번째 수 : "); num2 = Integer.parseInt(br.readLine()); oper = Test3.getOper();//3.오퍼에 객체생성을 할때 오류를 가져옴으로 result = 0; if(oper.equals("+")) { // oper은 String이라 equals로 비교 result = num1 + num2; } else if (oper.equals("-")) { result = num1 - num2; } else if (oper.equals("*")) { result = num1 * num2; } else if (oper.equals("/")) { result = num1 / num2; } System.out.printf("%d %s %d = %d\n", num1, oper, num2, result); } catch (Exception e) { //4.여기서 오류를 처리하고 스트링으로 출력한다. System.out.println(e.toString()); } } }

javapackage com.day16; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; //OutputStreamReaderWriter public class Test4 { public static void main(String[] args) throws IOException { int data; System.out.print("문자열?"); Reader rd = new InputStreamReader(System.in); Writer wr = new OutputStreamWriter(System.out); while((data = rd.read()) != -1) { wr.write(data); wr.flush();// flush() : 강제로 내보낸다. } } }
반응형
블로그의 정보
무작정 개발
무작정 개발