JAVA
2011. 6. 2. 22:08
자바에서는 프로그램 실행 중에 발생하는 에러를 익셉션(exception, 예외) 라고 한다.
익셉션 처리, 예외처리 같은 말이다. 다음 예제를 보자.
이렇게 세가지의 블록으로 나뉘며 하나씩 살펴보면 try 블록안에는 위 예제의 result = a / b; 처럼
예외상황이 발생할 가능성이 있는 명령문을 써넣어야 하고 catch문 에는 그 예외상황을 처리할 수 있는
명령문을 넣어야 한다. 그리고 finally 에는 위 블록의 익셉션 여부와 상관없이 마지막에 수행되는
명령문을 넣는다. 모두 넣은 예제를 보자.
그리고 하나더 문제가 있다. 배열의 갯수는 여섯개인데 포문은 열번을 돌아버리니 배열이 모자라
익셉션이 난다. 그래서 두번째 catch(java.lang.ArrayIndexOutOfBoundsException e){ 이것을
넣어준 것이다. 배열관련 익셉션 처리 구문이다. 결과값을 보자
예상한대로 다섯개를 돌고 여섯번째는 0이기 때문에 연산오류 catch문이 동작했다.
그리고 배열이 모자른 7,8,9,10 번째 배열은 모두 배열익셉션이 났다.
오늘 배운 예외처리는 실무에서 기능 구현만큼이나 신경을 써야한다. 어느부분에서 어떤이유로
오류가 나던 이 try / catch 문을 이용하여 시스템이 죽어버리는 일이 생기면 안된다.
사용자 입장에서 보면
아무리 기능이 좋고 편리한 앱 또는 프로그램이라도 툭하면 꺼지고 죽어버리는 프로그램이라면
며칠 못가 지우거나 기능이 한단계 낮아도 안정적인 프로그램을 쓸 것이다.
출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다.
익셉션 처리, 예외처리 같은 말이다. 다음 예제를 보자.
class ExceptionTest {
public static void main(String args[]){
int a = 3, b = 0;
int result;
result = a / b;
System.out.println(result);
System.out.println("Done");
}
}
위으 소스를 보면 3 을 0 으로 나누는 불가능한 연산을 하라그랬다. 로그에 보면
java.lang.ArithmeticException: 이런식으로 익셉션이 발생한 것을 확인 할 수 있다.
바로 이럴 때 try문을 사용하여 예외처리를 할 수 있다.
기본형식은 이렇다.
try{
}
catch{
}
finally{
}
java.lang.ArithmeticException: 이런식으로 익셉션이 발생한 것을 확인 할 수 있다.
바로 이럴 때 try문을 사용하여 예외처리를 할 수 있다.
기본형식은 이렇다.
try{
}
catch{
}
finally{
}
이렇게 세가지의 블록으로 나뉘며 하나씩 살펴보면 try 블록안에는 위 예제의 result = a / b; 처럼
예외상황이 발생할 가능성이 있는 명령문을 써넣어야 하고 catch문 에는 그 예외상황을 처리할 수 있는
명령문을 넣어야 한다. 그리고 finally 에는 위 블록의 익셉션 여부와 상관없이 마지막에 수행되는
명령문을 넣는다. 모두 넣은 예제를 보자.
class ExceptionTest2 {
public static void main(String args[]){
int a = 3, b = 0;
int result;
try{
result = a / b;
System.out.println(result);
}
catch(java.lang.ArithmeticException e){
System.out.println("연산이 잘못 되었습니다");
}
finally{
System.out.println("Done");
}
}
}
맨 위의 3을 0으로 나누어 오류가 났던 소스를 익셉션 처리한 것이다. 소스를 보면 try문에서
연산을 한다. catch 문에선 그 연산이 오류가 있을 때 연산이 잘못되었다고 찍게 만들고
마지막으로 작업이 완료되었다는 Done 을 finally에 찍어주었다.
컴파일 해보면 역시나 연산은 안되고 catch문의 "연산이 잘못 되었습니다" 가 뜬 뒤 아래에
Done. 이 찍혔다. finally 문은 생략이 가능하고 catch 아래에 System.out.println("Done");을
찍어도 위와 같은 결과가나온다. catch 안의 java.lang.ArithmeticException e 는 익셉션 변수타입과
이름이다. 이름에 해당하는 e 는 프로그래머가 정할 수 있지만 앞에 익셉션 변수 타입은 반드시
발생하는 익셉션 종류와 맞아야 한다. 지금 쓴 익셉션의 종류는 연산결과에 오류가 있을 때 사용하는
익셉션이고 자세한건 여기에 있다.
try문이 중첩되었을 때는 어떻게 하는지 보자.
class ExceptionTest3 {
소스를 살펴보면 divisor[cnt] 란 배열이 있고 값이 5,4,3,2,1,0 이 있다.
int share = 100 / divisor[cnt]; 여기에 100을 divisor[cnt] 로 나누는데
이 배열의 cnt 는 for문 때문에 열번을 돌게 된다, 5,4,3,2 이런식으로 차례대로 순번이 올라가면서
100을 나눠댄다. 하지만 마지막 여섯번째를 돌 때 값이 0이 들어오므로 연산이 안되고
첫번째 catch(java.lang.ArithmeticException e){ 문이 동작한다. 연산을 한다. catch 문에선 그 연산이 오류가 있을 때 연산이 잘못되었다고 찍게 만들고
마지막으로 작업이 완료되었다는 Done 을 finally에 찍어주었다.
컴파일 해보면 역시나 연산은 안되고 catch문의 "연산이 잘못 되었습니다" 가 뜬 뒤 아래에
Done. 이 찍혔다. finally 문은 생략이 가능하고 catch 아래에 System.out.println("Done");을
찍어도 위와 같은 결과가나온다. catch 안의 java.lang.ArithmeticException e 는 익셉션 변수타입과
이름이다. 이름에 해당하는 e 는 프로그래머가 정할 수 있지만 앞에 익셉션 변수 타입은 반드시
발생하는 익셉션 종류와 맞아야 한다. 지금 쓴 익셉션의 종류는 연산결과에 오류가 있을 때 사용하는
익셉션이고 자세한건 여기에 있다.
try문이 중첩되었을 때는 어떻게 하는지 보자.
class ExceptionTest3 {
public static void main(String args[]){
int divisor[] = { 5, 4, 3 ,2 ,1, 0};
for (int cnt = 0; cnt < 10; cnt++){
try{
int share = 100 / divisor[cnt];
System.out.println(share);
}
catch(java.lang.ArithmeticException e){
System.out.println("연산이 잘못 되었습니다");
}
catch(java.lang.ArrayIndexOutOfBoundsException e){
System.out.println("배열이 잘못 되었습니다");
}
}
System.out.println("Done");
}
}
소스를 살펴보면 divisor[cnt] 란 배열이 있고 값이 5,4,3,2,1,0 이 있다.
int share = 100 / divisor[cnt]; 여기에 100을 divisor[cnt] 로 나누는데
이 배열의 cnt 는 for문 때문에 열번을 돌게 된다, 5,4,3,2 이런식으로 차례대로 순번이 올라가면서
100을 나눠댄다. 하지만 마지막 여섯번째를 돌 때 값이 0이 들어오므로 연산이 안되고
그리고 하나더 문제가 있다. 배열의 갯수는 여섯개인데 포문은 열번을 돌아버리니 배열이 모자라
익셉션이 난다. 그래서 두번째 catch(java.lang.ArrayIndexOutOfBoundsException e){ 이것을
넣어준 것이다. 배열관련 익셉션 처리 구문이다. 결과값을 보자
20
25
33
50
100
연산이 잘못 되었습니다
배열이 잘못 되었습니다
배열이 잘못 되었습니다
배열이 잘못 되었습니다
배열이 잘못 되었습니다
Done
예상한대로 다섯개를 돌고 여섯번째는 0이기 때문에 연산오류 catch문이 동작했다.
그리고 배열이 모자른 7,8,9,10 번째 배열은 모두 배열익셉션이 났다.
오늘 배운 예외처리는 실무에서 기능 구현만큼이나 신경을 써야한다. 어느부분에서 어떤이유로
오류가 나던 이 try / catch 문을 이용하여 시스템이 죽어버리는 일이 생기면 안된다.
사용자 입장에서 보면
아무리 기능이 좋고 편리한 앱 또는 프로그램이라도 툭하면 꺼지고 죽어버리는 프로그램이라면
며칠 못가 지우거나 기능이 한단계 낮아도 안정적인 프로그램을 쓸 것이다.
출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다.
'JAVA' 카테고리의 다른 글
JAVA] 14. 자바의 연산자 -1 (0) | 2011.06.08 |
---|---|
JAVA] 13. 자바의 타입 분류 체계와 프리미티브 타입 (0) | 2011.06.07 |
JAVA] 11. 매소드 호출문 (0) | 2011.06.02 |
JAVA] 10. 반복문 (0) | 2011.05.31 |
JAVA] 9. 조건문 (0) | 2011.05.31 |