Programming/Java

13. 예외처리

주죵 2021. 1. 13. 23:47
728x90
반응형

초보개발자 주씨는 현업 개발자로 취업한 후 방구석에서 혼자 노트북으로 다루던것과 차원이 다른 무거운 프로젝트를 보고 놀라움과 두려움을 느꼈다... 그래 바로 내이야기다..

내가 다니고 있는 회사에선 다양한 툴과 언어를 사용한다. 하지만 모든 언어에서 중요하게 여겨지고 시스템 실행의 완성도를 높이는 필수적인 작업은 예외처리 작업이다. (Error Handling 이라고 볼 수 있다.)

강의에서 나오는 예시를 들어서 설명을 해보자

예외처리의 필요성

두가지 숫자를 넣으면 곱하기 빼기 더하기 나누기의 사칙연산을 모두 수행해주는 프로그램이 있다. 이때 입력값이 10과 0이라면  10/0에 의해 오류가 발생하고 프로그램의 동작이 멈출것이다.

그런데 우리는 나누기 오류 하나때문에 나머지 세가지값을 잃어야할까? 그건 너무 쌉손해다. 이때 나누기에 예외처리만 잘 해준다면 우리는 깔끔하게 연산값들을 얻을 수 있을것이다.

 

예외처리 문법

try ~ catch ~ finally

구성은 단순하다


try

{예외가 발생할 수 있는 로직}

catch (문제가 발생하는 경우)

{발생한 문제를 처리하는 부분}

(이부분은 선택적이다)

finally {무조건 실행하는 부분}


finally는 문제가 발생하든 말든 항상 실행된다

 

throws

예외가 발생시킨 호출쪽으로 예외를 던져버리는 방식이다.(나는 처리 못할때니 니가 처리해라! 하고 던져버리는것)

public class ThrowsExClass{
	public ThrowsExClass(){
    	actionC();
    }
    private void actionA() throws Exception {
    	System.out.println("actionA");
        int[] iArr = {1,2,3,4};
        System.out.println(iArr[4]);
        System.out.println("actionAA");
     
    }
    private void actionB(){
    	System.out.println("actionB");
        
        try{
        	actionA();
        }catch (Exception e){
        	System.out.println("예외는 여기서 처리할게요.";
            System.out.println(e.getMessage()); //뭐가 문제였는지 알아보기 위함
            
        }
        
        System.out.println("actionBB");
    }
    
    private void actionC(){
    	System.out.println("actionC");
        actionB();
    	System.out.println("actionCC");
    }
}

위에서 보면 생성자로 인해 객체 생성하면 actionC가 실행될것이다.

C가 실행될때 actionB가 또 실행되는데, try catch에 의해 A가 다시 실행된다. 

actionA는 index range가 벗어났기 때문에 오류가 발생한다. 하지만 throws Exception처리가 되어있으므로 아몰랑~ 하며 자신을 호출한 actionB로 되돌아가고 try catch문에 잡혀 예외처리가 되는 구조이다.

 

자주 접하게되는 예외들

예외의 정류는 너어~~무 많다. java api문서만 봐도 Exception은 종류가 너무많다. 대표적인것을 보자

 

1) ArrayIndexOutOfBoundsException

위의 예제에서만 봐도 나오는 예외이다.

데이터분석 한~ 창 많이할때 파이썬에서도 많이 본 예외다ㅋㅋㅋ

 

2) NullPointerException 

존재하지 않는 객체를 가리킬때 발생한다. null값을 가지고 있는 객체에 뭔짓을 하려고 할때 많이 접하는 경우이다.

큰 프로젝트를 진행할땐 의도치않게 왕왕 접한다고 한다

 

3) NumberFormatException

문자를 숫자로 처리할때 발생한다. 이것 또한 코테 혹은 데이터분석시에 많이 접했던 예외다. csv파일로 데이터 끌어왔을때 ,처리 되어있는 엑셀파일들은 String처리되어있어서 바로 연산 안되던 경우가 왕왕 있었던것 생각해보면 될듯하다.

 

4) DB관련 Exception

ClassNotFoundException : 드라이브 이름을 찾지 못할때 발생

SQLException : db url이나 id, pw가 올바르지 않을때 발생한다. 

얼렁 공부해야하는 jsp나 spring framework할때 많이 발생한다고 한다. 갈길이멀다... jsp 개어려웡...

 

오늘은 예외처리에 대해 알아보았다. 

안정성과 활용도 높은 소프트한 코딩을 위해 잘 써먹어보쟈~

 

출처 : 신입 SW 인력을 위한 자바 (by 블스)

728x90

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

15. JAVA 입출력(I/O)  (0) 2021.01.16
14. JAVA Collections  (0) 2021.01.15
12. API  (0) 2021.01.11
11. 패턴을 통한 객체지향 언어의 이해  (0) 2021.01.10
10. 인터페이스  (0) 2021.01.07