일단 해보는 개발자

[JAVA] 예외처리 - try catch (생활코딩) 본문

JAVA/JAVA이론 3

[JAVA] 예외처리 - try catch (생활코딩)

뛔르박 2020. 6. 14. 22:30

https://opentutorials.org/course/1223/6226

 

예외 1 - 문법 - 생활코딩

성공과 실패 객체 지향 이전까지가 프로그램을 동작하게 하는 법이라면 객체 지향은 웅장한 소프트웨어를 만들기 위한 방법이라고 할 수 있다. 그리고 필자는 이러한 지식을 성공하기 위한 지��

opentutorials.org


 

▶ 예외란?


예외란 프로그램을 만든 프로그래머가 상정한 정삭적인 처리에서 벗어나는 경우에
이를 처리하기 위한 방법이다.
'예외 처리'라고도 부른다.

 


 

먼저 위에 링크 걸어둔 생활코딩에 나온 예제를 보자.

package Opentutorials;

class Calculator {
	// 필드
    int left, right;
    
    //메소드
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }
    
    public void divide() {
        System.out.print("계산결과는 ");
        System.out.print(this.left/this.right);
        System.out.print(" 입니다.");
    }
}

/* 메인 영역 */
public class CalculatorDemo {
    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        c1.setOprands(10, 0);
        c1.divide();
    }
}

 


메인 영역을 보자.
setOprands메소드가 실행되며 필드의 right, left 변수에 각각 10, 0이 할당된다.
그리고 밑의 divide메소드를 실행하면서 10을 0으로 나누게 된다.
10을 0으로 나누는 것은 수학적으로 의미가 없기 때문에 일반적으로 프로그래밍 언어에서는 이것을 에러로 처리한다. (비정상적인 상황)

에러코드를 확인해보자.


/ by zero

0으로 나누기를 했다는 것을 알려준다.

ArithmeticException;
수학 에러가 발생했다.

at Opentutorials.Calculator.divide(Calculator.java:15)
Calculator클래스의 divide메소드가 있는 15번째 줄에서 오류가 발생했다.
(위의 예제에서는 몇 번째줄인지 확인할 수 없지만, 이런식으로 오류가 몇 번째 줄에서 발생했는지 알 수 있다.) 

at Opentutorials.CalculatorDemo.main(CalculatorDemo.java:7)
CalculatorDemo클래스는 메인영역이 있는 클래스이다. 메인메소드에서 오류가 발생했다.
7번째 줄의 divide메소드 호출부분에서 오류가 났다는 것을 확인할 수 있다.

 

 

try..catch문을 이용해서 수정해보자.
package Opentutorials;

class Calculator {
	// 필드
    int left, right;
    
    //메소드
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }
    
//    public void divide() {
//        System.out.print("계산결과는 ");
//        System.out.print(this.left/this.right);
//        System.out.print(" 입니다.");
//    }
    
    public void divide() {
        try {
            System.out.print("계산결과는 ");
            System.out.print(this.left/this.right);
            System.out.print(" 입니다.");
        } catch(Exception e) {
            System.out.println("오류가 발생했습니다 : "+e.getMessage());
        }
    }
}

/* 메인 영역 */
public class CalculatorDemo {
    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        c1.setOprands(10, 0);
        c1.divide();
    }
}

 

에러가 날 것이 예측되는 부분을 try 중괄호로 감싼다.
try문이 실행될 때, 에러가 발생하면 try의 로직은 실행이 중단되고 바로 catch구문이 실행된다.

 

catch(Exception e)
에러에 대한 정보를 담고있는 객체의 데이터타입은 Exception이라는 클래스이다. 

catch(Exception e) {
    System.out.println("오류가 발생했습니다. : " + e.getMessage());
}
Exception 객체에는 getMessage메소드가 들어있는데, 이 메소드는 에러가 발생한 이유에 대한 정보를 리턴한다.  
여기서 에러가 발생한 이유는 '/ by zero' 이다.

 

 

▶ try catch

try...catch는 예외에서 핵심적인 역할을 담당하는 문법적인 요소다.

try {
   예외의 발생이 예상되는 로직
} catch (예외클래스 인스턴스) {
    예외가 발생했을 때 실행되는 로직
}

 


티스토리에서 글 작성하기 엄청 힘들다.. 글자크기가 자기마음대로 막 변한다ㅠㅠㅠ

Comments