-
[ Java ] 예외 처리하기면접 준비 2020. 5. 29. 14:55
Java에서 예외를 처리하는 방법은 2가지가 있습니다.
- try-catch 문 사용하기
- throws 예약어 사용하기
try-catch
finally
예외가 발생하든 발생하지 않든 반드시 실행해야 하는 영역입니다. 예를 들면 DB 작업을 할 때 DB 작업이 성공했든 실패했든 사용한 DB 자원은 반드시 해제해 주어야 하고, 파일 입출력을 하고 난 후에는 Stream을 반드시 닫아주어야 합니다. 이런 작업을 try 영역에서 지정했다면 예외가 발생한 경우 실행되지 않을 수 있으므로 finally 영역에 지정해 주어야 합니다.
예외 종류
Java에서 모든 클래스의 최상위 클래스는 Object 클래스입니다. 그리고 Object 클래스를 예외 클래스 중 최상위 클래스인 Throwable 클래스가 상속받습니다.
Error 클래스에 속하는 에러들은 JVM이 갑자기 죽어버린 경우 등 개발자들이 예외처리 할 수 없는 것들입니다. 개발자들이 예외처리를 해주어야 하는 에러들은 Exception을 상속받는 에러들 입니다.
RuntimeException ( Unchecked Exception )
컴파일 단계에서는 문제가 발생하지 않고 실행 시에만 문제가 발생하는 예외들입니다.
(Checked)Exception
컴파일 단계에서 예외가 발생하는 경우입니다. 사용자의 작업에 의해서 발생하는 경우가 많습니다.
시스템에서 파일을 검색하는 프로그램을 만들었을 때 사용자가 없는 파일 이름을 입력하여 FileNotFoundExcetion이 발생, 입출력 예외가 발생하는 경우 IOException이 발생하는 등이 있습니다.
throws
예외 처리를 자신이 호출한 메소드에서 하도록 예외 처리를 떠넘길 수 있습니다.
Optional
Java에서 Null이 들어있는 데이터를 다룰 때는 NullpotinException을 발생할 가능성이 있어 항상 중의해야 합니다. 이를 위해 아래와 같이 if문으로 체크하면서 코드를 작성함으로서 이를 막습니다.
public static void main(String[] args) { String str = null; if (str == null) { System.out.println(0); } else { System.out.println(str.length()); } }
Null 처리를 간편하게 하기 위해서 Java8에 Optional 클래스가 추가 되었습니다. Optional은 데이터를 담고 있는 상자 같은 역할을 하게 되는데, Optional을 이용하면 위의 코드를 아래와 같이 진행할 수 있습니다.
public static void main(String[] args) { String str = null; Optional<String> strOptional = Optinal.ofNullable(str); System.out.println(strOptional.orElse("").length()); }
하지만 Optional 클래스는 비싸므로 단순히 값이나 null을 얻을 목적으로 사용할 때는 null을 사용하는 것이 좋습니다. ( Optional을 사용하기 위한 26가지 주의 사항 )
객체를 생성하는 메소드
- Optinal.empty() : 데이터가 없는 Optional 객체를 생성
- Optinal.ofNullable(Input) : 입력데이터에 null이 들어 올 수 있는 가능성이 있는 Optional 객체를 생성
- Optinal.of(Input) : 입력데이터에 null이 들어 올 수 없는 Optional 객체 생성
객체의 데이터를 꺼내오는 메소드
- get() : 데이터를 가져오고, 데이터가 없는 경우 Null을 반환
- ofElse(기본값) : 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 기본값을 반환
- orElseGet(기본값을 반환해 줄 람다식) : 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 람다식의 로직으로 기본값을 만들어서 반환
- orElseThrow(예외를 반환해줄 람다식) : 데이터를 가져오고, 데이터가 없는 경우 인자로 들어간 예외를 발생
'면접 준비' 카테고리의 다른 글
[ Java ] 다형성 ( Polymorphism ) (0) 2020.05.25 [ Java ] final 과 static (0) 2020.05.25 [ Java ] 제네릭 ( Generic ) (0) 2020.05.25 [ Java ] Collection (0) 2020.05.25