일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 문자열
- BufferedReader
- 백준
- Stack
- 그리디
- 다리 만들기
- 구현
- 빅데이터
- 백트래킹
- 완전탐색
- HashMap
- 브루트포스
- dfs
- 시뮬레이션
- 탐색
- oracle
- 다이나믹프로그래밍
- DP
- LIS
- Python
- Queue
- 스택
- 배열
- 아스키코드
- 프로그래머스
- Java
- 새벽코딩
- BFS
- 알고리즘
- SQL
- Today
- Total
새벽코딩
[JAVA] try~catch 본문
안녕하세요 J코딩입니다.
오늘 다뤄볼 내용은 JAVA의 예외처리 방법입니다.
개발시 예외적인 상황을 어떻게 처리해야하는지 정리하는 시간을 갖겠습니다.
개발을 하다보면 예기치 못한 상황에서 에러들이 발생하곤 합니다.
그때문에 개발자는 오류가 발생할 수 있는 부분을 미리 예측하고 적당한 대응을 할 수 있어야합니다.
보통의 예외처리는 if, elseif, else 로 처리한다고 알고있으실 겁니다.
"네 맞아요" 대부분의 핵심 에러들은 조건문에 의해 처리가 됩니다. 그럼에도 예상못한 문제가 발생할걸 대비하여 try~catch문을 이용합니다.
본격적으로 try~catch문을 공부하기전에 조건절을 이용한 예외처리는 어떻게 되는지 살펴보도록 하겠습니다.
1. 조건문을 이용한 예외처리
자바에서 말하는 예외란 프로그램 실행 도중에 발생하는 문제 상황을 뜻하므로 컴파일 시 발생하는 문제는 예외라고 하지 않습니다.
예를 들어, 현재 프로그램의 실행은 잘되었다고 하였을때 text값을 입력하는 폼이 나이 또는 키를 요구한다면 우리는 최소 0이상의 수가 입력되어야 합니다. (여기 0이하는 없으시죠?) 이때, 0보다 작은 값이 입력되었다면 이건 예외의 상황이라고 할 수 있습니다.
컴파일은 잘되지만 0보다 작은 값을 입력한것은 예외라고 한다 이거죠!!
즉, 예외란 이렇게 논리에 맞지 않는 상황을 의미합니다.

try~catch문이 만들어지기 이전까지는 이렇게 if문을 사용한 예외처리를 주로 해왔습니다.
num1 < 0 ------>>예외 발생부분
System.out() ------>>예외 처리부분
2. try~catch문
자바는 예외처리를 위해서 try~catch문을 제공하고 있다.
try~catch문은 그 이름처럼 매우 직설적인 뜻을 가지고 있습니다.
try(시도해보고) catch(안되면 여기서 잡는다)
즉, try절 안에서 무언가 이벤트가 발생되고 해당 이벤트에서 문제가 발생되면 catch절에서 오류를 탐지할 수 있습니다.
try와 catch는 하나의 문장을 구성하지만 각각 중괄호를 이용한 별도의 영역을 형성하고 있습니다.
try는 예외상황이 발생할 만한 영역을 감싸는 용도로 사용되고, catch는 발생한 예외의 처리를 위한 코드를 묶어두기 위한 용도로 사용되어 집니다.
이렇듯 catch 영역에서 예외의 상황이 처리되기 때문에 소스코드상에서 예외상황 처리를 위한 코드를 쉽게 알 수 있습니다.

try와 catch는 하나의 문장으로 try와 catch사이에 다른 문장이 삽입되어서는 안됩니다.
위의 소스를 보시다시피 try영역에서 발생하는 AAA예외상황이 catch영역에서 처리됩니다.

try영역에 다음과 같은 예외상황을 입력해두었습니다. 설마 이런 상황일때?? 이렇게 말입니다.
문법공부를 어느정도 공부해보신 분들이라면 이 소스를 보자마자 발생할 수 있는 에러 상황이 떠오를 수 있으실 겁니다.
<첫번째 가정>
[사용자가 숫자가 아닌 문자를 입력했을때]
아마 이정도는 누구나 쉽게 예측을 하고 프론트에서 Validation 체크를 했을 것입니다.
여기서 우리는 이런 생각을 할 수 있습니다.
"대체 어떤 바보가 나눗셈 식에 문자를 입력해?"
여담을 하자면, 실무에서 서비스 이용자들은 우리 생각이상으로 상상하기 힘든 창의적인 오류를 내곤하기때문에 우리는 항상 방어코딩을 할 수 있어야합니다. ㅎㅎ
<두번째가정>
[나눗셈의 분모에 0이 입력되었을때]
수학에서 나누어지는 수는 0이 될 수 없습니다.
Java에선 분모에 0이 입력되었을때 내부적으로 ArithmeticException을 호출해줍니다.
ArithmeticException e 는 예외클래스의 인스턴스를 참조한다는 뜻이고 예외가 발생하면 이 영역이 실행되어집니다.
예외 클래스 종류는 java API를 참조하면 많은 도움이 될 것입니다.
그렇다면 이러한 의문점이 생길 수 있습니다.
"우리의 프로그램에는 논리에 관한 모든 예외가 정의 되어져 있는가?"
물론 수학적, 문자적, DB커넥션관련 수 많은 논리가 이미 존재하지만 모든 논리예외가 정의 되어져있지는 않을 겁니다.
하지만, 대부분의 논리들은 정의되어있기 때문에 걱정할 필요가 없습니다.
다음 사진에는 코딩시 자주발생하는 예외 4가지를 보여줍니다.
#예외 상황을 알리는 클래스의 종류

3. try~catch의 장점
우리가 if조건문만을 사용했을 때에는 코드 중간중간 예외마다 if 조건문을 넣어 코드가 길어지고 지저분했지만 try~catch문의 사용으로 코드가 보다 깔끔해져 가독성이 좋아졌습니다.

try~catch문의 catch부분.
즉, 예외처리부분은 발생할 수 있는 여러 예외들을 다중으로 쓸 수 있기에 코드를 깔끔하게 다룰 수 있습니다.
오늘은 예외상황에서의 try~catch문의 사용 및 장점등을 쉽고 간단히 정리해보았습니다.
긴글 읽어주셔서 감사합니다.
-새벽코딩-
'JAVA' 카테고리의 다른 글
[JAVA] 배열과 리스트 (0) | 2023.02.26 |
---|---|
[JAVA] 오버로딩(feat. this) (0) | 2023.02.25 |
[JAVA] 입력 (Scanner vs BufferedReader) (2) | 2022.11.13 |