• Java - 예외 처리(exception handling)

    2021. 2. 22.

    by. 공상개발

    안녕하세요.

    공상 개발입니다.

     

    이번 시간에는 예외 처리(exception handling)의 개념과

    Java에서 예외 처리를 사용하는 방법을 알아보겠습니다. 

     

     


    1. 개발자에게 예외란?

    2. try, catch, finally

    3. 예외 처리

    - 예외 탐지 및 처리

    - 예외 전파

    -Java에서 제공하는 예외 클래스


     

    1. 개발자에게 예외란?

     

    ERORR

     

    예외란, 일반적 규칙이나 정례에서 벗어나는 일을 뜻합니다.


    프로그래밍을 하다 보면 개발자가 의도하지 않은 상황이 발생하게 되고, 이와 같은 결과는 오류로 이어지게 됩니다.

    대표적인 오류로는 컴파일 오류와 런타임 오류 등이 있습니다.

     

    컴파일 오류 : 컴파일 도중에 일어나는 오류 . ex) 문법 오류를 컴파일 과정에서 차단
    런타임 오류 : 프로그램 실행 중 발생한 오류 . ex) 프로그래머의 논리적 결함에 의해 발상하는 '논리 오류'



    우리는 런타임 오류가 발생하는 과정을 방지하기 위해 예외 처리를 사용합니다.

    우선, 예외 처리를 사용하는 방법을 배우기 전에 try, catch, finall에 대해서 간단하게 알아보는 시간을 가지겠습니다.

     


     

    2. try, catch, finally

     

    필드 형식

     

    <돌발 상황>

    1. 서비스 이용자가 대학생의 학년 필드에 1,2,3,4 이외 값을 저장하려는 경우
    2. 서비스 이용자가 나이 필드에 음수 값을 저장하려는 경우
    3. 서비스 이용자가 전화번호를 대시 기준으로 입력하지 않는 경우

     

    위와 같은 상황들이 있다고 가정합시다.

    앞서 말했듯이 위의 예시를 본다면, 프로그래머가 코드로 제어할 수 없는 돌발 상황이 발생할 수 있습니다.

    항목에 따라 발생하는 오류들은 전부 다 다르고 어떤 오류가 생길지 다 예측하긴 힘듭니다.

    그래서 프로그래밍은 이런 돌발 상황을 방지하기 위해 

     

    예외 처리

     

    Exception Handling이란 장치들을 마련해놨습니다.

    이 장치는 보통 try, catch, finally 명령어로 구성되어 있습니다.

    try-catch

     

    try로 감싼 부분은 예외 상황 발생 시,

    프로그램이 죽는 게 아니라 다음 과정으로 넘어갈 수 있도록 합니다.

    즉, Exception이 발생하면 이 catch 문에서 해당 오류에 대한 동작을 실행합니다.

     

    하지만 try 명령이 성공 or 실패했을 경우,

    둘 중 하나에 바로 return 해서 해당 함수가 종료되는 경우가 발생합니다.

    이와 같은 동작을 방지하기 위해서 아래의 이미지처럼 finally 구문을 사용합니다.

     

    try-catch-finally

    이런 형태는 데이터베이스에서 많이 사용됩니다.

    특정 정보를 꺼내오기 위해 DB에 접속한 다음 접속을 종료해야 하는 서비스 등..

     

    데이터베이스 예시

    이런 식으로 말이죠.

     


     

    3. 예외처리

    예외 탐지 및 처리

     

    그렇다면 이런 오류들을 해결하기 위해 예외 발생 메서드에서 예외 처리를 하면 되지 않나?

    라는 생각을 가지실 수도 있지만 이러한 생각은 심각한 문제를 가지게 됩니다.

    아래의 이미지를 한번 보겠습니다.

     

    예외발생 메소드에서 예외처리

     

    호출한 메서드에서 오류 처리를 시도하는 클래스입니다.

    위의 코드에서의 문제점은 오류 메시지만 출력하고 나이를 저장하지 않는다는 점입니다.

    나이 변경을 수행하기 위한 메서드인데 위와 같은 형태라면 제대로 동작하지 않겠죠.

     

    그렇다면 어떻게 예외 처리를 해야 될까요.

    Java에서의 예외 처리

    예외 발생시키기 과정 : 예외발생 메소드 내에서 이루어짐

    1) 예외 발생정보 저장하는 예외객체 생성

    2) 호출한 메소드로 예외객체 던짐

    3) 예외발생 메소드임을 시그니처에 표시 : 시그니처에 예외객체의 클래스 명시

     

    위의 같이 3가지 순서로 예외 처리하면 됩니다.

    3번

     

     

    1,2번

     


     

    예외 전파

     

    위에서는 예외 처리를 탐지하여 처리했지만,

    예외 전파를 통해서 예외 처리를 사용할 수 있습니다.

     

    1. 예외 처리하지 않고서 자신을 호출하는 메서드로 예외 전파.

    2. 아주 간단하게 메서드 시그니처에 throws 키워드와 전파할 예외의 종류 나타내는 예외 객체의 클래스만 명시.

     

    예외 전파

    이렇게 말이죠.

     


     

    Java에서 제공하는 예외 클래스

     

    Java에서 제공하는 예외 클래스


    Throwable

    #예외를 위한 최상위 클래스
    #예외객체는 모두 Throwable 클래스의 하위 클래스의 객체


    Exception 클래스 및 하위 클래스

    #일반적인 Java 프로그램에서 잡아 처리해야 할 예외를 위한 클래스


    Error 및 하위 클래스

    #비정상적 상황에서 발생하는 시스템 오류를 위한 클래스

     

     

     


     

    피드백

     

    작성된 내용 중 잘못된 정보나 접근이 있을 시, www.instagram.com/hong_.98/을 통해 말씀해 주시면 감사하겠습니다.


    읽어주셔서 감사합니다.

    'Language > Java' 카테고리의 다른 글

    Java - 네트워크 통신(Socket)  (0) 2021.02.28

    댓글