📌 에러(Error)와 예외(Exception)의 차이
에러(Error)란 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나 JVM 실행에 문제가 생겼을 경우 발생하는것
예외(Exception)란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류.
예외가 발생하면 프로그램이 종료가 된다는것은 에러와 동일하지만 예외는 예외처리(Exception Handling)을 통해 프로그램을 종료 되지 않고 정상적으로 작동되게 만들어줄 수 있다. 자바에서 예외처리는 Try Catch문을 통해 해줄 수 있다.
📌 구조
try { //예외발생할 가능성이 있는 문장 }catch(Exception1 e1) { //Exception1이 발생했을 경우, 이를 처리하지 위한 문장적는다. //보통 이곳에 예외메세지를 출력하고 로그로 남김. }catch(ExceptionN eN) { //ExceptionN이 발생했을 경우, 이를 처리하지 위한 문장적는다. }finally{ //예외발생여부에 관계없이 상항 수행되어야 하는 문장적는다. }
- try : 예외 발생이 날수도 있는 문장들/명령어들
- catch : try 블럭에서 예외가 발생 했을 때, 해당 예외에 관해 처리하는 문장들/명령어들
- finally : 예외 발생에 상관없이 수행되는 문장들/명령어들
📌 여러가지 예외문들
예외 구문 이유 ArithmeticException 정수를 0으로 나눌경우 발생 ArrayIndexOutOfBoundsExcetion 배열의 범위를 벗어난 index를 접근할 시 발생 ClassCastExcetion 변환할 수 없는 타입으로 객체를 반환 시 발생 NullPointException 존재하지 않는 레퍼런스를 참조할때 발생 IllegalArgumentException 잘못된 인자를 전달 할 때 발생 IOException 입출력 동작 실패 또는 인터럽트 시 발생 OutOfMemoryException 메모리가 부족한 경우 발생 NumberFormatException 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환시 발생 주로 발생 하는 예외
- NullPointException : 객체 참조가 없는 상태, 즉 null 값을 갖는 참조변수로 객체 접근 연사자인 토드(.)를 사용했을 때 발생
- ArrayIndexOutOfBoundsExcetion : 배열에서 인덱스 범위를 초과하여 사용할 경우 발생
- NumberFormatException : 숫자타입으로 변경할 수 없는 문자를 치환시키려고 하면 발생하는 에러
- ClassCastExcetion : 규칙을 무시하고 억지로 타입을 변환시킬경우 발생하는 에러
💻 예시
- 예시 1
public class Main { public static void main(String[] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("Something went wrong."); } finally { System.out.println("The 'try catch' is finished."); } } } //출력 Something went wrong. The 'try catch' is finished.위에서 보면 try문구에서 myNumbers[] 라는 배열의 크기가 3인데 myNumbers[10]의 값을 불러올러고 하여 예외가 생긴 후, catch 문구를 실행한 후, finally 문구를 실행시켜주었다.
- 예시2
class Solution { public boolean solution(String s) { if (s.length()!=4 && s.length()!=6){ return false; } try{ Long.parseLong(s); return true; } catch (NumberFormatException e){ return false; } } }위 문제는 문자열의 길이가 4나 6이고, 숫자로만 이루어져 있을 때 true 값을 돌려주는 메서드이다. 조건문으로 문자열의 길이릴 확인해주었다. 그 후, try 문구 에서 문자열을 Long 타입 값으로 받는다. 하지만 예외가 발생 시, catch 문이 해당 열외가, NumberFormatException 예외가 맞은 뒤 확인 후, 맞으면 catch 문을 실행한다.
📓 오늘 느낀 점 한줄 요약
"try and catch me if you can" 🖐
20230407 TIL