정처기 감자정처기 감자
Java클래스/메서드

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Java 예외 처리 (try-catch)

코딩Java
읽는데 9분 소요
처음 쓰인 날: 2026-02-17
마지막 수정일: 2026-09-25
조회수: —

요약

Java 예외 처리의 핵심인 try-catch 구문과 throw, throws 키워드를 알아봅니다. 정보처리기사 실기에 출제된 예외 처리 문제를 풀기 위한 핵심 개념을 정리합니다.

예외 처리 핵심 정리

개념설명예시
try예외가 발생할 수 있는 코드를 감싸는 블록try { ... }
catch예외가 발생했을 때 실행되는 블록catch (Exception e) { ... }
finally예외 발생 여부와 관계없이 항상 실행finally { ... }
throw예외를 직접 발생시키는 키워드throw new Exception();
throws메서드가 예외를 던질 수 있음을 선언void f() throws Exception
다중 catch예외 종류별로 다르게 처리catch (ArithmeticException e)

예외란?

예외 (Exception)란 프로그램 실행 중에 발생하는 오류입니다. 예를 들어, 0으로 나누거나, 배열 범위를 벗어나거나, null 값에 접근하는 경우 등이 있습니다.

java
코드 하이라이팅 중…

예외가 발생하면 프로그램이 비정상 종료됩니다. 이를 방지하기 위해 예외 처리(Exception Handling)를 사용합니다.


try-catch 구문

try-catch는 예외가 발생할 수 있는 코드를 안전하게 실행하는 구문입니다.

java
코드 하이라이팅 중…

동작 원리

  1. try 블록의 코드를 실행합니다
  2. 예외가 발생하지 않으면: catch 블록을 건너뛰고 다음 코드를 실행합니다
  3. 예외가 발생하면: try 블록의 나머지 코드를 건너뛰고, catch 블록을 실행합니다
java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
예외 발생 시 try 블록의 나머지는 실행되지 않습니다
try 블록에서 예외가 발생하면, 예외가 발생한 줄 이후의 코드는 건너뛰고 바로 catch 블록으로 이동합니다.

try-catch의 반환값

메서드 안에서 try-catch를 사용할 때, try와 catch 모두 return을 가질 수 있습니다. 예외 발생 여부에 따라 다른 값을 반환합니다.

java
코드 하이라이팅 중…

이 패턴은 람다 표현식과 함께 출제된 적이 있습니다.


finally 블록

finally는 예외 발생 여부와 관계없이 항상 실행되는 블록입니다. try-catch 뒤에 붙여서 사용합니다.

java
코드 하이라이팅 중…

try-catch-finally 실행 흐름

예외가 발생하지 않는 경우:

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

예외가 발생하는 경우:

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
상황trycatchfinally
예외 없음전체 실행건너뜀실행
예외 발생예외 시점까지 실행실행실행
finally는 return이 있어도 실행됩니다
try나 catch 블록에서 return을 만나도, finally 블록은 반드시 실행됩니다. 이것이 시험의 핵심 함정입니다.

finally와 return

try나 catch 블록에서 return을 실행해도, finally는 return 전에 실행됩니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

test()의 반환값은 "try"입니다.

실행 순서를 단계별로 보면:

  1. System.out.print("A") 실행 → "A" 출력
  2. return "try"를 만남 → 반환할 값 "try"를 정해둠 (아직 메서드를 빠져나가지 않음)
  3. 메서드를 빠져나가기 전에 finally 블록 실행 → "C" 출력
  4. finally가 끝나면, 정해둔 값 "try"를 반환

finally에서 return하면?

try에서 반환값을 정해두었더라도, finally에 return이 있으면 finally의 return이 새로운 반환값을 지정합니다. 앞서 정해둔 값은 버려집니다.

java
코드 하이라이팅 중…

위 예시에서 catch가 없는 것은, try는 catch 없이 finally만 붙여서 사용할 수도 있기 때문입니다.

finally의 return이 try/catch의 return을 덮어씁니다
finally 블록에 return이 있으면, try나 catch의 return 값은 무시되고 finally의 return 값이 최종 반환됩니다. 실무에서는 권장하지 않지만 시험에서 출제됩니다.

다중 catch 블록

하나의 try에 여러 개의 catch 블록을 사용하여, 예외 종류에 따라 다르게 처리할 수 있습니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

예외 매칭 순서

catch 블록은 위에서 아래로 순서대로 검사하며, 처음 일치하는 catch 블록만 실행됩니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…

예외 클래스 계층 구조

Java의 예외는 상속 관계로 묶여 있습니다. 모든 예외의 최상위 부모는 Throwable이고, 그 아래 Exception과 Error가 있으며, Exception 아래로 RuntimeException, IOException 등이 갈라지고 거기서 다시 ArithmeticException, ArrayIndexOutOfBoundsException 등으로 세분화됩니다.

text
코드 하이라이팅 중…

부모 예외는 자식 예외까지 모두 잡습니다. catch (Exception e)가 ArithmeticException을 잡을 수 있는 이유는, ArithmeticException이 Exception의 하위 클래스이기 때문입니다. 반대로 자식 예외는 부모 예외를 잡지 못합니다.

catch 블록잡을 수 있는 예외
catch (Throwable t)모든 예외와 오류 (Error 포함)
catch (Exception e)모든 Exception 계열
catch (RuntimeException e)ArithmeticException, NullPointerException 등
catch (ArithmeticException e)ArithmeticException만
계층형 매칭: 자식 → 부모 순서로만 확인
catch 블록은 '해당 예외가 catch 타입과 같거나 그 하위 타입인가?'를 위에서 아래로 검사합니다. 하위 클래스가 먼저 나와야 더 구체적으로 잡힐 수 있습니다.

구체적인 예외를 먼저 작성

Exception은 모든 예외를 포함하는 가장 넓은 범위의 예외입니다. ArithmeticException, ArrayIndexOutOfBoundsException 등은 모두 Exception의 하위 종류입니다. 따라서 catch (Exception e)는 어떤 예외든 잡을 수 있습니다. Exception을 먼저 작성하면 모든 예외가 여기서 잡혀서, 아래의 구체적인 catch는 도달할 수 없습니다.

java
코드 하이라이팅 중…
java
코드 하이라이팅 중…
구체적인 예외를 먼저, 일반 예외를 나중에
catch 블록은 구체적인 예외 클래스(ArithmeticException 등)를 먼저, 일반적인 예외 클래스(Exception)를 나중에 작성해야 합니다. 순서가 잘못되면 컴파일 에러가 발생합니다.

자주 나오는 예외 종류

예외발생 상황예시
ArithmeticException0으로 나눌 때10 / 0
ArrayIndexOutOfBoundsException배열 범위 초과arr[5] (크기 3인 배열)
NullPointerExceptionnull에 접근할 때null.toString()
ClassCastException잘못된 타입 변환(String) new Object()
NumberFormatException숫자 변환 실패Integer.valueOf("abc")

throw 키워드

throw 는 예외를 직접 발생시키는 키워드입니다. 개발자가 특정 조건에서 의도적으로 예외를 만들 수 있습니다.

java
코드 하이라이팅 중…

throw와 try-catch 함께 사용

throw로 예외를 발생시키면, 해당 코드를 감싸는 try-catch에서 잡을 수 있습니다.

java
코드 하이라이팅 중…
throw vs throws
throw는 예외를 '발생시키는' 키워드이고, throws는 메서드가 예외를 '던질 수 있음을 선언'하는 키워드입니다. 이 둘을 혼동하지 마세요.

throws 키워드

throws 는 메서드 선언부에 사용하여, 이 메서드가 예외를 던질 수 있음을 알리는 키워드입니다. 예외를 직접 처리하지 않고, 호출한 쪽에서 처리하도록 넘기는 것입니다.

java
코드 하이라이팅 중…

throws가 선언된 메서드를 호출하는 쪽에서는 반드시 try-catch로 감싸거나, 자신도 throws를 선언해야 합니다.

java
코드 하이라이팅 중…

throw vs throws 비교

키워드위치역할예시
throw메서드 본문 안예외를 직접 발생시킴throw new Exception();
throws메서드 선언부예외를 던질 수 있음을 선언void f() throws Exception
throw와 throws, 왜 s 하나 차이일까?

영어 문법 차이입니다. throw는 동사 원형(명령문)으로 "예외를 던져라"라는 뜻이고, throws는 3인칭 단수형(선언문)으로 "이 메서드는 예외를 던진다"라는 뜻입니다. 영어에서 "I throw" vs "He throws" 같은 차이입니다.


정보처리기사 실기 대비 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999