본문 바로가기
Java의 정석/예외처리

예외처리 01 - 프로그램 오류

by Hwanii_ 2023. 8. 20.
728x90
재고 관리 프로그램 일 때, 재고는 음수가 될 수 없다.

 
1. 
컴파일 에러
>> compile-time error
>> 컴파일 자체가 안되서, 에러를 수정 하기 전 까지 실행 조차도 할 수 없다.
 

 
위의 이미지를 보면, s가 소문자로 시작해서,
컴파일 에러가 발생하는것을 확인 할 수 있다.
 
[ 참고 ]
 

 

 
프로젝트 자동 빌드 설정이 체크 되어 있어서,
개발자가 인텔리제이, 이클립스, ..  등에서 코드를 작성 하고,
저장을 하면, 자동으로 컴파일을 해준다.
 
위의 컴파일 에러 테스트를 위해 만든 .java 파일이 있는 경로를 따라가보자.
 

 
cmd 창을 열고,
cd 를 치고 한칸 띄우고, 경로를 치고 엔터를 누르면,
cmd 창의 경로가 설정 된다.
그리고 dir 을 치고 엔터를 누르면,
 

 
해당 경로에 존재하는 모든 파일들이 나오게 된다.
 
여기서, javac 파일명.java 를 치고 엔터를 누르면,
 

 
이렇게 1 error 가 나타나는 것을 볼 수 있다.
 
scratch.java 파일에 6번째 줄에 컴파일 에러가 발생 했다는 의미 이다.
 
javac >> 자바 컴파일러 이다.
 
원래는 컴파일을 이렇게 해줘야 하지만, 이클립스, 인텔리제이, .. 등이 
개발자 대신에 컴파일을 해주는 개념 이다.
 
자바 컴파일러는 무엇을 할까 ?
 
1) 구문 (문법) 체크
 
2) 번역
 
3) 최적화 (소스 코드의 최적화)
 
>> 간단한 계산은 컴파일러가 그냥 계산 해버린다.
ex) int i = 3 + 5; 
int i = 8; 
로 계산해버린다.
(최적화)
 
>> 위의 간단한 계산보다 더 높은 수준의 작업들도 컴파일러가 대신 해준다.
 
>> 개발자가 편의를 위해 생략한 코드를 컴파일러가 추가 해준다.
ex) 모든 클래스명 뒤에 붙는, extends Object 를 추가.
ex2)  인터페이스를 생성할 때, public, abstract 등의 키워드를 생략했으면 자동 추가.
..
 

 
컴파일 에러가 발생하는 6번째 라인의 코드를 주석 처리 하고,
cmd 창에서 컴파일을 시도하면,
정상적으로 컴파일이 되는것을 확인 할 수 있다.
 

 
2.
런타임 에러
>> runtime error
>> 실행은 되지만, 수행하다가 에러가 발생해서, 프로그램이 종료 된다.
 

 
문법상에 문제가 없기 때문에, 컴파일 에러가 발생 하지 않지만,
 
실행을 하면, 아래와 같이 에러가 발생 하게 된다.
 
이런것을 런타임 에러 라고 한다.
 

 
왜 에러가 발생 했을까 ?
 
main() 메서드의 매개변수로 아무것도 없기 때문에 발생하는 에러 이다.
 
cmd 창에서도 확인해 볼 수 있다.
 
위에서 컴파일을 해줬기 때문에, .class 파일이 생성 되어 있는것을 확인 할 수 있다.
 

 
프로그램을 실행 하려면, .class 파일을 실행 하는 것이다.
 

 
Scratch.class 파일을 실행 시키면, 콘솔창과 같이, 에러를 확인 할 수 있다.
 
3.
논리적 에러
>> logical error
>> 프로그램이 잘 동작 하고, 종료도 안되지만, 개발자에 의도와 다르게 프로그램이 동작 한다.
 
컴파일 에러도 통과하고, 런타임 에러도 통과 했는데,
개발자에 의도와 다르게 발생하는 에러를 의미 한다.
 
4.
Java의 런타임 에러
(실행중에 발생 할 수 있는 에러)
 
에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류.
예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류.
 
에러는 개발자가 잡을 수 없다. 어쩔 수 없는 심각한 오류.
ex) OutOfMemoryError (OOME)
 
예외는 개발자가 잡을 수 있다. 
>> 프로그램이 죽지 않고 정상 작동 할 수 있도록 예외를 잡아 줘야 한다.
 
 5.
예외처리의 정의와 목적
 
예외처리 == exception handling
 
정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드 작성 하기.
목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행 상태를 유지 하기.

반응형