JAVA 기초 (42) 예외처리

코린이서현이·2023년 9월 7일
0

Java

목록 보기
44/46

🙂들어가면서🙂

나는 IT전공이지만 2학년이 되고 휴학을 1년동안 할 떄까지 코딩공부는 전혀 안하고 있었다.
그러다 휴학 말 쯤에 친구가 같이 프로젝트를 하자고 제안을 해줬고, 그걸 계기 삼아 공부를 하게 되었다.
그 이후로 코딩공부를 해야겠다는 마음을 먹었고, 이후 코딩 스터디에도 들어오게 되었다.
이후에 그 스터디에 제안해준 친구까지 들어왔는데, 친구가 공부하는 모습을 보니까 정말 멋있었다.
특히 열품타를 가지고 공부를 기록하는데 꾸준히 하루에 5시간 이상하는 모습이 정말 멋있고 대단했다.
나도 학교를 다니면서도 개인공부시간을 가져가면서 공부를 해야겠다고 마음먹었다.

📕 오류란

프로그램에서 발생하는 오류는 컴파일 오류와, 실행 오류 두 가지가 있다.

📖 오류의 종류

📒 logical error

실행은 되지만 의도와 다르게 동작하는 것이다.

📒 Compillation Error

컴파일 단계에서 발생하는 에러
컴파일 오류를 수정해야 프로그램을 실행할 수 있기 때문에 고치면 된다.

📒 Runtime Error

실행중에 발생하는 에러
런타임 에러 발생 시 프로그래머가 역추적해서 원인을 확인해야한다. 대부분 설계 미숙으로 발생한다.

🚫 실행오류는 프로그램을 종료시키기 때문에 심각한 문제가 되고, 오류 재현이 쉽지 않다는 점이 있다. 따라서 로그분석을 통해 원인을 찾을 수 있도록 프로그램을 개발할 때 로그를 정확하게 남기는 것이 중요하다.

✅ 로그란

  • 모든 행위와 이벤트 정보를 시간의 경과에 따라 기록한 데이터이다.
    (수준이 조금 더 높아지면 추가로 공부할 예정)

📖 Runtime Error의 종류

실행중에 발생하는 오류를 error와 exception으로 구분할 수 있다.

📒 에러(error)

프로그램 코드에 의해서 수습될 수 없는 심각한 오류
기계상에 문제가 생기거나 스택오버플로우등이 발생한 것으로 복구 할 수 없는 오류이며, 예측이 불가능하기 때문에 개발자가 해결 할 수없다.

🤔 정말 그럴까?

📒 예외(exception)

프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외 처리 코드란 대응코드를 작성하여 프로그램의 비정상적인 종료나 동작을 막을 수 있다.

📖 자바의 예외 클래스

자바는 오류를 Error와 Exception로 나누고 이를 클래스로 만들어 처리한다. (모든 것을 클래스로 만드는 자바 폼 어떤데)
예외를 객체로 생성해 예외 처리코드에서 해당 예외 객체를 이용하고 처리하도록 한다.

  • Throwable
    모든 오류 클래스의 최상위 클래스다. 하위 클래스로는 Error, Exception 클래스가 있다.
  • Error
    개발자가 제어하지 않는 클래스
  • Exeption
    컴파일 시에 예외처리를 하라고 오류 메시지를 띄워주는 경우(IOException)도 있지만, 예외처리를 하지 않아도 컴파일 오류가 나지 않는 경우(RuntimeException)도 있기 때문에 개발자가 주의를 해야한다.

📒 컴파일 예외 클래스 살펴보기

  • 컴파일 예외 클래스는 컴파일 과정에서 예외처리가 필수인 예외 클래스이다.

IOException I/O(입력과 출력)에 관해서 발생할 수 있는 예외
FileNotFoundException 파일에 접근하려고 하는데 파일을 찾지 못했을 때 발생하는 에러

📒 런타임 예외 클래스 살펴보기

  • 명시적인 예외처리를 하지 않아도 실행이 가능하다.
    왜 가능하게 했을까?
    개발자의 충분한 주의로 회피할 수 있는 수준이기 때문이다.

ArrayIndexOutOfBoundsException 배열의 범위를 넘어선 인덱스를 참조할 때 발생하는 에러
ArithmeticException 정수를 0으로 나눌 때 발생하는 에러
NullPointException null 객체에 접근해서 method를 호출하는 경우 발생하는 에러
NumberFormatException 정수가 아닌 문자열을 정수로 변환할 때 예외 발생
ClassCastException 상속, 구현 관계 아니면 클래스는 다른 클래스로 타입을 변환할 수 없는데, 이 규칙을 무시하고 억지로 타입을 변환시킬경우 발생하는 에러
InputMismatchException 의도치 않는 입력 오류 시 발생하는 예외

🔍 컴파일 예외 클래스를 런타임 예외 클래스처럼 예외처리가 선택가능한 클래스로 만들가.

class MyCheckedException extends Exception { ... } // checked excpetion

public class Main {
    public static void main(String[] args) {
            install();
    }

    public static void install() {
        throw new RuntimeException(new IOException("설치할 공간이 부족합니다."));
        // Checked 예외인 IOException을 Unchecked 예외인 RuntimeException으로 감싸 Unchecked 예외로 변신 시킨다
    }
}

🙂마무리하면서🙂

다음 글에서는 예외를 처리하는 방법에 대해서 다루도록 하겠다.
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글