에러(error)와 예외(exception)
- 에러(error) : 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나 JVM 실행에 문제가 생겼을 경우 발생 하는 것 → 개발자가 대처할 방법이 극히 제한적
- 예외(exception) : 사용자의 잘못된 조작 또는 잘못된 코딩으로 인해 발생하는 프로그램 오류
- 예외가 발생하면 프로그램이 종료가 된다는것은 에러와 동일하지만 예외는 예외처리(Exception Handling)을 통해 프로그램을 종료 되지 않고 정상적으로 작동되게 만들어줄 수 있음
- Java에서 예외처리는 Try Catch문을 통해 해줄 수 있음
예외구문들
- ArithmeticException : 정수를 0으로 나눌경우 발생
- ArrayIndexOutOfBoundsExcetion : 배열의 범위를 벗어난 index를 접근할 시 발생
- ClassCastException : 변환할 수 없는 타입으로 객체를 반환 시 발생
- NullPointException : 존재하지 않는 레퍼런스를 참조할 때 발생
- IllegalArgumentException : 잘못된 인자를 전달할 때 발생
- IOException : 입출력 동작 실패 또는 인터럽트 시 발생
- OutOfMemoryException : 메모리가 부족한 경우 발생
- NumberFormatException : 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생
빈도 높은 예외
- NullPointException
→ java에서 가장 빈번하게 발생하는 예외로, 객체 참조가 없는 상태. null 값을 갖는 참조변수로 객체에 접근을 시도할 때 발생함
→ 객체가 없는 상태에서 객체를 사용하려 했으니 예외가 발생하는 것
- ArrayIndexOutOfBoundsExcetion
→ Array에서 Index 범위를 초과하여 사용할 경우 발생
→ 예를 들면, 길이가 4인 int[] array = new int[4] 배열을 선언했다면 0~3까지의 index만 사용할 수 있음, 하지만 이 배열의 index가 -1이나 4를 참조하는 순간 예외가 발생함
- NumberFormatException
→ 문자열로 되어있는 데이터를 숫자타입으로 변경하는 경우가 자주 발생하는데 숫자타입으로 변경할 수 없는 문자를 치환시키려고 하면 발생하는 예외
- ClassCastExcetion
→ 타입 변환은 상위 Class와 하위 Class간에 발생하고 구현 Class와 Interface간에도 발생하는데, 이런 관계가 아니면 Class는 다른 Class로 타입을 변환할 수 없음
→ 하지만 이 규칙을 무시하고 타입을 변환 시킬경우 발생하는 예외
throw
- 강제로 예외를 발생시키는 경우
- throw 예약어 뒤에는 java.lang.Throwable Class를 상속받은 자식 Class의 객체를 지정해야 함
- throw는 메소드내에서 상위 블럭으로 예외를 던지는 것
- throw는 고의적으로 에러를 발생시킬때도 사용되지만, 현재 메소드의 에러를 처리한 후 상위 메소드에 에러 정보를 줌으로써 상위 메소드에서도 에러가 발생 감지용으로도 사용됨
class TestException {
public static void main(String[] args) {
try {
throw new Exception();
}
catch (Exception e) {
System.out.println(e);
}
}
throws
- throws는 메소드를 정의할 때 throws 예약어를 시그니처에 추가하면 그 메소드를 호출하는 곳에서 예외 처리를 해야 함
- 즉, 현재 메소드에서 상위 메소드로 예외를 전가시키며 자신이 예외를 처리하지 않고, 자신을 호출한 곳에서 예외처리의 책임을 전가하는 것
예외처리코드
try{
//에러가 발생할 수 있는 코드
throw new Exception(); //강제 에러 출력
}catch (Exception e){
//에러시 수행
e.printStackTrace(); //오류 출력(방법은 여러가지)
throw e; //최상위 클래스가 아니라면 무조건 던져주자
}finally{
//무조건 수행
}
- try 블록에는 예외가 발생할 수 있는 코드가 위치
- try 블록의 코드에서 예외가 발생하면 즉시 실행을 멈추고 catch 블록으로 이동하여 예외처리 코드를 실행하고 finally 블록의 코드를 실행
- try 블록의 코드가 정상 실행되면 catch 블록의 코드는 실행되지 않고 finally 블록의 코드를 실행
- try-catch 문은 주로 데이터베이스에 데이터를 주고받을 경우에 많이 사용 → 데이터베이스를 거쳐올 때는 변수가 많이 생기기 때문에 필수적
- 그 후 finally에는 데이터베이스와의 연결을 끊어주는 코드를 주로 삽입 → 특정 예외가 발생하여 데이터베이스와의 연결이 끊어지지 않으면 여러가지 문제를 야기할 수 있기 때문
- 최상단 클래스를 제외한 나머지 클래스에서의 예외처리는 반드시 Throw를 해주어야 함 → 그렇지 않으면 예외처리를 해주었음에도 불구하고 Main에서는 Exception을 전달받지 못하여 예외를 인지 못하는 경우가 발생
Reference
https://velog.io/@gillog/Java-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC-Exception
'STUDY' 카테고리의 다른 글
JSP | JSP 태그 종류와 사용에 대하여 (0) | 2022.05.24 |
---|---|
JavaScript | ajax를 사용한 상태에서 특정 td 태그에 css 주기 (0) | 2022.05.23 |
JavaScript | prop(), attr() (0) | 2022.04.26 |
JAVA | @RequestBody, @ResponseBody, @RequestParam (0) | 2022.04.20 |
JAVA | JSON vs Ajax (0) | 2022.04.19 |