Java 공부(예외처리)

hoin_lee·2022년 6월 17일
0

Java

목록 보기
17/18

프로그램 실행중 예기치 못한 상황을 미리 예측하고 처리하는 것을 예외처리라고 한다.

기본적으로 런타임 시점에서 발생되는 오류는 에러(error)와 예외(exception)으로 나뉨

에러
-메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 일단 발생하면 복구할 수 없는 심각한 오류
예외
-인자값 Null 에러 NPE(NullPointExceprion)같은 발생하더라도 수습이 가능한 덜 심각한 오류.

실행예외(RuntimeException)

Runtime Error
-프로그램 실행 시점에서 발생하는 에러
-문법 오류나 오타등은 컴파일 시점에서 예측 가능한 오류를 잡아줄 수 있지만 실행 중 발생하는 잠재적 에러까진 잡을 수 없기에 컴파일은 완료되어 프로그램 실행되고 실행도중 의도치 않은 동작에 대처하지 못해 에러가 발생할 수 있다.
-예외가 발생하면 JVM은 해당하는 실행 예외 객체를 생성<-실행 예외는 컴파일러가 예외 처리 여부를 확인하지 않기에 개발자가 예외 처리 코드 추가 여부를 결정

대표적 실행 예외

  • ArithmeticException
  • 0으로 나누기 같은 부적절한 산술 연살을 수행할 때 발생
  • IllegalArgumentException
  • 메서드에 부적절한 인수를 전달할 때 발생
  • IndexOutOfBoundsException
  • 배열, 벡터 등에서 범위를 벗어난 인덱스를 사용할 때 발생
  • NoSuchElementException
  • 요구한 원소가 없을 때 발생
  • NullPointerException
  • null 값을 가진 참조 변수에 접근 할 때 발생
  • NumberFormatException
  • 숫자로 바꿀 수 없는 문자열을 숫자로 변환하려 할 때 발생 EX)10

    일반 예외

  • Compile Error
  • 컴파일 시점에서 소스의 오타나 잘못된 구문, 자료형 체크등의 검사를 수행할 때 발생하는 에러 이 시점에서 발생하는 문제들을 수정 후 컴파일을 ㅇ성공적으로 마칠경우 클래스 파일(\*class) 파일이 생성된다. 컴파일러는 발생할 가능성을 발견하면 컴파일 오류를 발생 개발자는 예외 처리 코드를 반드시 추가
  • Logical Error
  • 소스 코드 컴파일도 정상적으로 되고 런타임상 에러가 발생하는 것도 아닌 개발자의 의도와 다르게 동작하는 에러. 시스템 상 프로그램이 멈추지는 않지만, 의도와는 다르게 동작하는 것 ex) 버튼을 클릭하면 팝업이 뜨게 만들었으나 팝업이 아닌 새로운 페이지가 뜨거나 아무동작을 안하는 것들

    대표적인 일반 예외

  • ClassNotFoundException
  • 존재하지 않는 클래스를 사용하려고 할 때 발생
  • InterruptedException
  • 인터럽트 되었을 때 발생
  • NoSuchFieldException
  • 클래스가 명시한 필드를 포함하지 않을 때 발생
  • NoSuchMethodException
  • 클래스가 명시한 메서드를 포함하지 않을 때 발생
  • IOException
  • 데이터 읽기 같은 입출력 문제가 있을 때 발생

    ※어떤 Exception이 발생할지 모를 때는 catch(Exception e)와 같이 Exception클래스를 이용

    코드 예시

    try-catch: 
    try { //... }
    catch (Exception error) { //... }
    finally{//필수 실행 구문}

    참고
    parselnt

  • parselnt("10"); // 10
  • 문자열 "10"을 숫자로 변환하여 정수 10을 리턴
  • parselnt("-10"); // -10
  • 문자열"-10"을 숫자로 변환하여 정수 음수 -10을 리턴
  • parselnt("10.9"); // 10
  • 문자열 타입의 실수값은 소수점을 제거한 후, 정수값만 리턴
  • parselnt(10); // 10
  • printStackTrace()와 getMessage() -> 예외 발생시 예외에 대한 정보를 printStackTrace()와 getMessage()를 통해 얻을 수 있다.
    printStackTrace() -> 예외 발생 당시 호출스택(Call Stack)에 잇었던 메서드의 정보와 예외 메세지 화면에 출력
    getMessage() -> 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.

    profile
    https://mo-i-programmers.tistory.com/

    0개의 댓글