Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 스프링 db2 - 데이터 접근 기술
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch1
- 자바의 정석 기초편 ch13
- 스프링 db1 - 스프링과 문제 해결
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch8
- 자바의 정석 기초편 ch4
- 자바의 정석 기초편 ch9
- 자바의 정석 기초편 ch12
- jpa - 객체지향 쿼리 언어
- 게시글 목록 api
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch11
- jpa 활용2 - api 개발 고급
- 스프링 mvc1 - 서블릿
- 2024 정보처리기사 시나공 필기
- @Aspect
- 자바의 정석 기초편 ch3
- 자바의 정석 기초편 ch6
- 코드로 시작하는 자바 첫걸음
- 스프링 mvc2 - 타임리프
- 스프링 mvc2 - 로그인 처리
- 타임리프 - 기본기능
- 스프링 mvc2 - 검증
- 스프링 입문(무료)
- 2024 정보처리기사 수제비 실기
Archives
- Today
- Total
나구리의 개발공부기록
자바의 정석 기초편 ch8 - 1 ~ 6[프로그램오류, 예외 클래스의 계층구조,예외처리하기, try-catch문의 흐름] 본문
유튜브 공부/JAVA의 정석 기초편(유튜브)
자바의 정석 기초편 ch8 - 1 ~ 6[프로그램오류, 예외 클래스의 계층구조,예외처리하기, try-catch문의 흐름]
소소한나구리 2023. 12. 4. 11:411) 프로그램오류
(1) 컴파일 타임 에러
- 컴파일 할 때 발생하는 에러, IDE에서 코드 작성시 템플릿 줄에서 바로 에러 확인이 가능
- 컴파일러가 하는 일은 구문체크, 번역, 최적화, 생략된 코드 추가 등의 기능을 함
- 터미널(cmd)창에서 코드를 작성하면 일일히 컴파일 해줘야하지만 IDE는 자동으로 컴파일 함
- 터미널에서 컴파일 방법
- 1. 터미널 실행
- 2. 컴파일 할 java파일이 있는 곳 (src폴더)으로 경로 이동, (cd 명령어 사용)
- 3. 경로 이동 후 커맨드 입력 : javac 파일명.java
(2) 런타임 에러
- 실행할 때 발생하는 에러 (실행 해야만 에러가 확인 가능) -> 런타임 에러가 발생하면 프로그램이 종료 됨
- 터미널에서 실행 방법(프로그램 실행)
- 1. 터미널 실행
- 2. 실행할 class파일이 있는 곳 (bin폴더)으로 경로 이동
- 2. 경로 이동 후 커맨드 입력 : java 파일명
(3) 논리적 에러
- 작성 의도와 다르게 동작
- 프로그램이 동작은 되지만 잘못되게 동작
2) Java에서 정의한 런타임 에러 (실행 중 발생할 수 있는 에러)
(1) 에러(Error)
- 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
- ex)OOME (Out of Memory Error)와 같은 문제는 프로그래밍 상으로 조치를 할 수 있는 부분이 없음
(2) 예외(exception)
- 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
- 코드를 통해 프로그램이 동작하도록 예외를 처리를 하여 오류를 정상화 할 수 있음
3) 예외 처리
- 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성 하는 것
- 목적 : 프로그램의 비정상 종료를 막고 정상적으로 동작하게 하는 것
(1) 예외클래스의 계층 구조
- Throwable 클래스 - 모든 오류의 조상
- Exception 클래스들 - 사용자의 실수와 같은 외부 요인에 의해 발생하는 예외
- IOException - 입출력 예외(I/O)
- ClassNotFoundException - 클래스가 존재하지 않음
- RuntimeException 클래스들 - 프로그래머의 실수로 발생하는 예외
- ArithmeticException - 산술계산예외(0으로 나눌 때 발생)
- ClassCastException - 형변환 예외
- NullPointerException - 널포인터 예외(참조변수가 null일때 메서드호출 등)
- IndexOutOfBoundsException - 배열 범위 벗어남 예외
4) try-catch문
- 예외를 처리할 때 사용, 즉 예외를 정상 흐름으로 반환하기 위함
- 간단하게 작성하더라도 { } 을 생략할 수 없으며 여러 catch문을 적용할 수 있음
** 적용시 주의사항
- 여러 catch문을 적용할 때 예외의 최고조상인 Exception을 제일 먼저 catch문으로 작성하면 아래의 catch문들이 동작하지 않으므로 Exception으로 예외를 처리하고자 할때는 try - catch문의 제일 아래에 적용해야함
- Exception으로 예외처리를 한 catch블럭은 Exception과 그 자손의 예외까지 모두 처리해버리기 때문에 가능하면 넓은 범위로 예외를 처리하는 것보다, 정확히 발생되는 예외를 처리하는 것이 좋음
- 그러나 Exception으로 모든 예외를 처리하는 것은 실제로 예외가 발생해야하는 상황도 정상흐름이 반환될 수 있기 때문에 권장하지 않음
(1) 동작 설명
- try문에 예외가 발생할 것 같거나 예외를 처리해야하는 코드를 입력하고 catch문에서 처리해야할 예외를 지정하여 예외를 처리
- 예외가 발생하면 try문에 작성된 다음 코드들은 실행되지 않고 바로 발생한 예외를 처리할 catch블럭을 찾아 넘어감
- 처리해야 할 예외가 일치하는 catch블럭이 없으면 예외 처리를 하지 않음, 즉 예외를 처리하지 못하므로 프로그램이 종료가 됨
try {
// 예외가 발생할 가능성이 있는 문장들을 작성
} catch (Exception1 e1) {
// Exception1이 발생햇을 경우, 이를 처리하기 위한 문장을 작성
} catch (Exception2 e2) {
// Exception2이 발생햇을 경우, 이를 처리하기 위한 문장을 작성
} catch (ExceptionN eN) {
// ExceptionN이 발생햇을 경우, 이를 처리하기 위한 문장을 작성
}
(2) 예제1
- 0/0 연산을 하여 고의로 ArithmeticException을 발생시키면, 그아래의 코드인 4를 출력하지 않고 바로 해당 예외를 처리할 수 있는 catch문으로 이동함
- catch문의 제일 하단에 최고조상인 Exception으로 예외를 처리하여 그외의 예외가 발생할 경우 해당 catch문에서 예외를 처리
class ex8_4 {
public static void main(String args[]) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
// 0으로 나눠서 고의로 ArithmeticException을 발생
System.out.println(0/0); // 고의적으로 예외 발생
System.out.println(4); // 예외발생 되면 실행되지 않는다.
} catch (ArithmeticException ae) {
if (ae instanceof ArithmeticException) // 예외가 맞는지 확인
System.out.println("true");
System.out.println("ArithmeticException");
// ArithmeticException을 제외한 모든 예외를 처리
} catch (Exception e){
System.out.println("Exception");
} // try-catch의 끝
System.out.println(6);
} // main메서드의 끝
}
(2) 예제2
- 발생한 예외는 ArrayIndexOutOfBoundsException(배열범위 벗어남) 이지만 예외처리하는 catch문은 ArithmeticException예외만 적용되어있어 해당 프로그램은 예외를 처리하지못하고 프로그램이 비정상종료가됨
- 꼭 예외처리는 예외가 발생하는 예외로 처리하거나 그 조상으로 처리해야함
class ex8_4 {
public static void main(String args[]) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
// ArrayIndexOutOfBoundsException 에러 발생
System.out.println(args[0]);
System.out.println(4); // 예외발생 되면 실행되지 않는다.
} catch (ArithmeticException ae) {
if (ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
// 비정상 종료 하지 않도록 일치하는 예외로 처리하거나 Exception으로 예외 작성
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ArrayIndexOutOfBoundsException");
}
System.out.println(6);
} // main메서드의 끝
}
// 실행 시 1,2,3 출력 후 6이 실행 되지 않고 에러 발생(비정상 종료)
// 예외가 발생한 것과 일치하도록 예외를 작성해야하며 최고조상인 exception으로 예외를 작성 해도 되지만 권장하지 않음
** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의
'유튜브 공부 > JAVA의 정석 기초편(유튜브)' 카테고리의 다른 글
자바의 정석 기초편 ch8 - 11 ~ 18[예외선언하기, finally블럭, 사용자정의예외만들기, 예외 되 던지기, 연결된 예외] (0) | 2023.12.05 |
---|---|
자바의 정석 기초편 ch8 - 7 ~ 10[printStackTrace(), 멀티 catch블럭, 예외 발생 시키기] (0) | 2023.12.04 |
자바의 정석 기초편 ch7 - 42 ~ 52[내부클래스의종류,특징,선언, 내부클래스의 제어자와 접근성, 익명클래스] (0) | 2023.11.30 |
자바의 정석 기초편 ch7 - 39 ~ 41[인터페이스의 장점, 인터페이스의 디폴트메서드] (0) | 2023.11.29 |
자바의 정석 기초편 ch7 - 35 ~ 38 [인터페이스의 선언, 상속, 구현, 인터페이스와 다형성] (0) | 2023.11.29 |