본문 바로가기

Language

(28)
throw, throws 지금까지는 남들이 발생시키는 예외에 대해서 처리하는 방법에 대해 알아보았다면, 우리가 우리의 코드에서 예외를 발생시킬 수도 있다. throw new Exception("문제가 발생했습니다."); throw new RuntimeException("문제가 발생했습니다."); public class MyException { public static void main(String[] args) { throw new RuntimeException("무언가 문제가 있습니다."); } } 이렇게 문제 상황이 발생했을 때, throw 구문을 통해서 예외를 발생시킬 수 있다. 이 경우에는 RuntimeException 객체를 이용하였지만, Exception 객체도 우리가 직접 생성할 수 있다. try catch 문으로 ..
try with resource 자원을 잡고, 놓아주는 작업을 try catch finally 문으로 만드는 과정은 상당히 복잡했다. 그래서 자원을 잡고, 놓아주는 작업을 간단한 형식으로 만들 필요성이 생겼다. JAVA SE 7 이전에는 finally 문을 이용하여 자원을 놓아주는 작업을 진행했다. 하지만 JAVA SE 7부터 try-with-resource 문이 등장하여 자원 관리를 훨씬 단순하게 할 수 있게 되었다. 클래스가 AutoCloseable 인터페이스를 상속한다면 try-with-resource 문을 사용할 수 있다. FileWriter로 만들어진 앱은 반드시 close를 해줘야 한다. 위 사진을 보면, FileWriter 클래스는 AutoCloseable 인터페이스를 상속하고 있음을 알 수 있다. try 다음에 바로 중괄..
finally 우리의 프로그램은 프로그램 외부의 자원(Resource)에 접근해서 작업을 진행할 수 있다. 대표적인 자원으로는 파일, 네트워크, 데이터베이스 등이 있다. 이러한 자원들은 프로그램 외부에 존재하기 때문에 우리의 프로그램이 온전히 제어하지 못한다. 우리의 프로그램만을 위해 존재하지 않기 때문에 읽기나 쓰기 작업을 하는 도중에 상황에 따라 연결이 불량하여 작업이 실패할 수 있다. 그래서 이러한 자원을 사용할 때는 자원을 붙들기 위해 파일의 경우 점유상태를 나타내기도 하고, 네트워크나 데이터베이스는 연결 상태를 유지한다. 그리고 우리가 필요한 작업을 끝내고 나서는 자원을 놓아주는 작업을 한다. 작업이 끝나고 붙잡고 있던 것을 놔줘야 한다. 이때 공통적으로 사용되는 메소드가 close 이다. try 문에서 오류..
Checked Exception vs Unchecked Exception 앞서 알아본 ArithmeticException, ArrayIndexOutOfBoundsException 같은 경우 try catch 문으로 잡아내지 않아서 프로그램이 뻗는다고 할지라도, 컴파일해서 실행할 수 있기는 했다. 이러한 Exception들을 Unchecked Exception이라고 부른다. Unchecked Exception은 모두 RuntimeException 클래스로부터 상속된 예외들이다. 하지만 try catch 문 등으로 잡아내지 않으면 프로그램이 컴파일도 안 되는 예외들이 있다. 이러한 예외들을 Checked Exception이라고 부른다. Throwable로부터 상속된 모든 클래스에서 RuntimeException을 제외한 모든 에러와 예외들이 Checked Exception에 속한..
catch문의 e 자바에서 예외를 다루다 보면, catch 문에서 e가 계속 목격된다. catch 문의 변수 e는 인스턴스이다. 예외들의 인스턴스에는 예외가 발생한 원인, 어디서 발생했는지 등에 대한 정보들이 담겨 있다. 이것들을 이용하면 프로그램의 어디서 왜 예외가 발생했는지 손쉽게 알 수 있다. public class ExceptionApp2 { public static void main(String[] args) { System.out.println(1); try { System.out.println(2); System.out.println(2 / 0); System.out.println(3); } catch (ArithmeticException e) { System.out.println("잘못된 계산이네요." + ..
예외의 우선순위 자바의 예외도 클래스로 구현되어 있다. ArithmeticException도 Java API 문서를 참고하면, RuntimeException으로부터 상속받은 클래스라는 것을 알 수 있다. 또한 RuntimeException은 Exception 클래스로부터 상속받은 클래스이다. 그래서 여러 예외가 있더라도 Exception 클래스를 이용해서 포괄적으로 처리할 수 있다. public class ExceptionApp2 { public static void main(String[] args) { System.out.println(1); int[] scores = {10, 20, 30}; try { System.out.println(2); System.out.println(scores[3]); System.ou..
예외 처리 (Exception Handling) 예외가 발생함에도 불구하고 그대로 프로그램을 완성시켰다면 사용자 입장에서는 잘못된 값만 넣어버리면 뻗어버리는, 언제 뻗을지 모르는 불안한 프로그램이라고 생각할 것이다. 예외는 발생할지라도 그 뒤의 작업을 실행하기 위해서는 예외 처리(Exception Handling)를 해야 한다. try catch 문을 이용해서 예외를 처리하면 어떤 값을 넣는 경우에도 끝까지 실행되는 튼튼한 프로그램이 된다. 가령, 이전에 알아봤던 2를 0으로 나누는 것의 경우, public class ExceptionApp { public static void main(String[] args) { System.out.println(1); try { System.out.println(2/0); } catch (ArithmeticExc..
예외 (Exception) 자바에서는 Error와 Exception을 구분한다. 오류(Error)는 숙명과도 같은 것이다. 애초에 문법이 잘못되어서 컴파일부터 오류가 발생할 수도 있고, 우리가 만든 자바 애플리케이션이 동작하는 환경에서 무언가 문제가 생겨서 발생할 수도 있다. 예를 들어 메모리가 부족하다든지, 운영체제가 문제가 생겨 프로그램이 정지됐다든지 등의 경우가 있다. 예외(Exception)는 우리가 짠 코드가 우리가 의도한 것과는 다른 상황에 직면했을 때를 지칭하는 것이다. 가령, 파일을 읽으려 했는데 파일이 없다거나, 예상하지 못한 값을 사용자가 입력했을 때 등이 있다. 개발자는 어떤 기능을 하는 코드를 의도를 가지고 만들게 되는데, 모든 사람이 그 의도에 맞춰서 행동하는 것은 불가능하기 때문에 그 예외 케이스에 대해 ..