프로그래밍을 하다 보면 다양한 오류와 마주치게 된다.

이런 내용의 심부름을 코딩한다고 생각해보자!
가장 먼저 보이는 오류는 철자와 문법이다.
이런 오류는 컴퓨터가 알아서 걸러낸다. 코딩 프로그램에서 빨간 줄을 딱 그어서
알 수 있도록 표시해줌.
특히 자바같은 컴파일 언어들, 즉 실행되기 전에 기계에게 더 친숙한 언어로 번역, 컴파일이 되는 언어들은 문법오류는 컴파일 과정에서부터 차단하기 때문에 실행 과정에서 오류가 나는 일은 없다!
이런걸 '컴파일 오류'라고 한다.

예를 들어서 총 만 7천원짜리 물건들을 사러 보내는데, 만 5천원을 줬다.
외상을 달아서 사올 수도 있겠지만 의도했던 상황이 아니라면 이 부분은 실수인 것.
이렇게 프로그래머의 논리적 결함에 의해 발생하는 것을 '논리 오류'라고 한다.
이런 오류들은 전적으로 이 코드에 달려 있기 때문에 프로그래밍하는 과정에서 방지할 수 있다.
프로그래머가 실수만 안 하면 되거든요 ^^!!
하지만 아까 마트에 계란이 없었던 것처럼 프로그래머가 코드로 제어할 수 없는 돌발 상황이 발생할 수 있다.
초등학생들이 적은 정보들을 보여주는 교사용 앱이 있다고 치자.

이 앱은 학교 교사로부터 이런 형식의 정보들을 받아와서

요렇게 화면에 띄워준다.
이름 항목을 읽어오고 나이 항목을 읽어서 정수 타입으로 변환하고, 전화번호를 대시 기준으로
3등분 해서 보여준다.
그런데 아이들이 적는 것은 예측불가 잖아요!
이름을 안적으면 null pointer 오류, 나이에 문자를 적어서 그 과정에서 오류가 나거나 등등..
하나 하나 다 if문을 적을 수도 있지만 이것 말고도 어떤 오류가 생길지 다 예측하긴 힘들다.
그래서 프로그래밍 언어들은 일반적으로 이런 돌발 상황에 대처하기 위해
'예외처리' , 'Exception handling'이란 장치들을 마련해놨다.

보통은 try와 catch란 명령어로 되어 있다.
오류가 발생할 수 있는 곳을 예측해서
try로 감싸놓은 부분은 뭐가 잘못되더라도 프로그램이 꺼져버리는 것이 아니라
"얘 왜이래" 하고 예외를 적당히 제껴놓은 다음 다음 과정으로 넘어갈 수 있도록 하는 것이다.

언어마다 다른 부분은 있지만 보통은 try블럭에서 예외상황, 즉 Exception이 발생하면
cacth 문에서 해당 오류에 대한 동작을 실행하고, 오류가 나든 안나든 finally 블럭을 마지막으로 실행한다.

어떤 오류가 나느냐에 따라 구분을 줄 수도 있다.
Exception 클래스에서 파생돼서 다양화된 이 예외사항들마다 다른 조취를 취할 수 있다!

try의 명령이 성공하거나 실패했을 경우 둘 중 하나에 바로 return 해버리는 경우가 있다.
그럴때는 해당 함수가 거기서 종료가 되거든요 ㅠㅠ

이 부분은 실행이 안되는 거죠.
이처럼 함수 자체를 종료해버리는 코드가 try나 catch둘 중 한 곳에 나오더라도 이 finally는 꼭 실행하고 가도록 하는 것.

데이터베이스에서 특정 정보를 꺼내오기 위해 거기에 접속한 다음 결과에 상관없이
접속을 종료해야 하는 서비스 등에서 finally가 많이 사용된다.