나는 IT전공이지만 2학년이 되고 휴학을 1년동안 할 떄까지 코딩공부는 전혀 안하고 있었다.
그러다 휴학 말 쯤에 친구가 같이 프로젝트를 하자고 제안을 해줬고, 그걸 계기 삼아 공부를 하게 되었다.
그 이후로 코딩공부를 해야겠다는 마음을 먹었고, 이후 코딩 스터디에도 들어오게 되었다.
이후에 그 스터디에 제안해준 친구까지 들어왔는데, 친구가 공부하는 모습을 보니까 정말 멋있었다.
특히 열품타를 가지고 공부를 기록하는데 꾸준히 하루에 5시간 이상하는 모습이 정말 멋있고 대단했다.
나도 학교를 다니면서도 개인공부시간을 가져가면서 공부를 해야겠다고 마음먹었다.
프로그램에서 발생하는 오류는 컴파일 오류와, 실행 오류 두 가지가 있다.
실행은 되지만 의도와 다르게 동작하는 것이다.
컴파일 단계에서 발생하는 에러
컴파일 오류를 수정해야 프로그램을 실행할 수 있기 때문에 고치면 된다.
실행중에 발생하는 에러
런타임 에러 발생 시 프로그래머가 역추적해서 원인을 확인해야한다. 대부분 설계 미숙으로 발생한다.
🚫 실행오류는 프로그램을 종료시키기 때문에 심각한 문제가 되고, 오류 재현이 쉽지 않다는 점이 있다. 따라서 로그분석을 통해 원인을 찾을 수 있도록 프로그램을 개발할 때 로그를 정확하게 남기는 것이 중요하다.
실행중에 발생하는 오류를 error와 exception으로 구분할 수 있다.
프로그램 코드에 의해서 수습될 수 없는 심각한 오류
기계상에 문제가 생기거나 스택오버플로우등이 발생한 것으로 복구 할 수 없는 오류이며, 예측이 불가능하기 때문에 개발자가 해결 할 수없다.
🤔 정말 그럴까?
프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외 처리 코드란 대응코드를 작성하여 프로그램의 비정상적인 종료나 동작을 막을 수 있다.
자바는 오류를 Error와 Exception로 나누고 이를 클래스로 만들어 처리한다. (모든 것을 클래스로 만드는 자바 폼 어떤데)
예외를 객체로 생성해 예외 처리코드에서 해당 예외 객체를 이용하고 처리하도록 한다.
Throwable
Error
Exeption
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 예외로 변신 시킨다
}
}
다음 글에서는 예외를 처리하는 방법에 대해서 다루도록 하겠다.