Java 개념정리 16일차

2026. 1. 21. 12:40대우개발원 수업 내용/Java 정리

반응형

 자바에서 컴퓨터 하드웨어 관련 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 에러라 하고, 그 외
프로그램 자체에서 발생하는 오류를 예외라고 한다. 
 예외 (Exception)
▪ 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
▪ 예외 처리 프로그램 통해 정상 실행상태 유지 가능
▪ 예외 발생 가능성이 높은 코드 컴파일할 때 예외 처리 유무 확인

 

[예외와 예외 클래스]

 일반 예외 (exception)
▪ 컴파일러 체크 예외
▪ 자바 소스 컴파일 과정에서 해당 예외 처리 코드 있는지 검사하게 됨
 

실행 예외 (runtime exception)
▪ 컴파일러 넌 체크 예외
▪ 실행 시 예측할 수 없이 갑자기 발생하기에 컴파일 과정에서 예외처리코드 검사하지 않음

 

 자바에서는 예외를 클래스로 관리

 

[실행 예외]

개발자의 경험에 의해서 예외 처리 코드 작성해야 함
▪ 예외처리코드 없을 경우 해당 예외 발생 시 프로그램 종료

 

 NullPointerException
▪ 가장 빈번하게 발생하는 실행 예외
▪ java.lang.NullPointerException
▪ 객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자 도트를 사용할 경우 발생

 

NullPointerException 발생 data에 값이 없는데 호출 한다는 실행예외 발생

(객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자 도트를 사용할 경우 발생)

 

이클립스 – [Run] – [Run Configuration] – [Arguments]탭 – [Program arguments]
• 아래와 같이 입력하여 해결

if 문 사용

 


[실행 예외]

 NumberFormatException
▪ 문자열을 숫자로 변환하는 경우
▪ 숫자가 변환될 수 없는 문자가 포함된 경우 java.lang.NumberFormatException 발생

더보기

숫자라서 Interger 타입으로 변환이 안되기 때문에 이후의 코드는 실행이 되지 않는다.


[실행 예외]

ClassCastException
▪ 상위 및 하위 클래스 그리고 구현 클래스와 인터페이스 간 타입 변환 가능
▪ 위 관계가 아닌 경우 ClassCastException 발생

▪  instanceof 연산자로 타입 변환 가능 여부를 미리 확인

Exception hander code


[예외처리 코드]

try-catch-finally 블록
▪ 생성자 및 메소드 내부에서 작성되어 일반예외와 실행예외가 발생할 경우 예외 처리 가능하게 함
▪ try 블록에는 예외 발생 가능 코드가 위치
▪ try 블록 코드가 예외발생 없이 정상실행되면 catch 블록의 코드는 실행되지 않고 finally 블록의 코드를 실행. try 블록의 코드에서
   예외가 발생한다면 실행 멈추고 catch 블록으로 이동하여 예외 처리 코드 실행. 이후 finally 블록 코드 실행
▪ finally 블록은 생략 가능하며, 예외와 무관하게 항상 실행할 내용이 있을 경우에만 작성.

 

예제 코드

더보기

 

위의 코드에 핸들러 코드 추가

Exception으로 인한 실행중지가 발생되지 않는다

 

다 완성했을때

finally 구간은 예외가 발생하지 않아도 무조건 실행되기 때문에 아래 코드처럼 생략하기도 한다

exception에 대한 정보를 확인할 수 있는 메세지 출력


더보기

e.printStackTrace(); // 예외가 어디서 발생했는지 추적해서 출력을 해주는 메서드


[예외 종류에 따른 처리 코드]

다중 catch
▪ 발생하는 예외별로 예외 처리 코드를 다르게 하는 다중 catch 블록
▪ catch 블록의 예외 클래스 타입은 try 블록에서 발생된 예외의 종류 말함
▪ try 블록에서 해당 타입 예외가 발생하면 catch 블록을 실행

예제 코드

더보기

 

왼쪽 코드를 오른쪽 코드로 변경

예제 코드


[예외 종류에 따른 처리 코드]

catch 순서
▪ 다중 catch 블록 작성 시 상위 예외 클래스가 하위 예외 클래스보다 아래 위치해야 함
▪ 잘못된 예

 

더보기

순서를 바꾸면 컴파일러가 발생한다

 

아래는 위에서 했던 코드에 추가한것

순서에 맞게 작성해서 문제 없이 작동

주석 처리 했을때 바뀌는 결과

catch문을 하나로 통합해서 null도 실행 가능하게


리소스 자동 닫기
▪ 리소스: 데이터를 제공하는 객체
▪ 리소스는 사용하기 위해 열어야(open) 하며, 사용이 끝난 다음에는 닫아야(close) 함
▪ 리소스를 사용하다가 예외가 발생될 경우에도 안전하게 닫는 것이 중요
▪ try-with-resources 블록을 사용하면 예외 발생 여부와 상관없이 리소스를 자동으로 닫아줌

예제 코드

예제 코드


[예외 떠넘기기]

throws 키워드
▪ 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 넘기는 역할
▪ throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분하여 나열

 

예제코드

 

[예외 떠넘기기]

메소드 내부에서 예외 발생 시 throws 키워드 이용해 메소드를 호출한 곳으로 예외 떠넘기기
▪ throws는 메소드 선언부 끝에 작성. 떠넘길 예외 클래스를 쉼표로 구분해서 나열
▪ 나열할 예외 클래스가 많으면 throws Exception 또는 throws Throwable 만으로 모든 예외 떠넘기기

 

사용자 정의 예외

 ▪ 표준 라이브러리에는 없어 직접 정의하는 예외 클래스
▪ 일반 예외는 Exception의 자식 클래스로 선언.  실행 예외는 RuntimeException의 자식 클래스로선언


예외 발생시키기 

▪ throw 키워드와 함께 예외 객체를 제공해 사용자 정의 예외를 직접 코드에서 발생시킬 수 있음
▪ 예외의 원인에 해당하는 메시지를 제공하려면 생성자 매개값으로 전달

'대우개발원 수업 내용 > Java 정리' 카테고리의 다른 글

Java 개념정리 15일차  (0) 2026.01.20
Java 개념정리 14일차  (0) 2026.01.19
Java 개념 정리 13일차  (1) 2026.01.15
Java 개념정리 12일차  (2) 2026.01.15
Java 개념정리 11일차  (1) 2026.01.13