본문 바로가기
클라우드 활용 자바개발자 양성과정/01. JAVA 프로그래밍 언어 활용

11. 예외처리

by moca7 2024. 7. 9.

 

ㅁ < 에러 종류 >

- 시스템 에러 : 컴퓨터의 오작동으로 인해 발생하는 에러 (소스코드로 해결 안 됨)

- 컴파일 에러 : 컴파일시 발생되는 오류. 소스코드 문법상 오류 (빨간줄) => 소스코드로 해결(개발자의 실수)

- 런타임 에러 : 프로그램 실행중 발생되는 오류. 소스코드 상에는 문제없지만 프로그램 실행시 오류

(개발자 혹은 사용자의 실수)

 

- [ 논리 에러 : 문법적으로 문제 없고, 실행시에도 문제 없음. 그러나 프로그램 의도상 맞지 않은 것 ]

 

- bin이라는 폴더 안에 우리가 작성한 소스코드가 .class파일로 변환된 것들이 보관되어 있다.

우리가 열어볼 수 없음. 컴퓨터가 알아볼 수 있게 작성된거라.

- 소스코드.java - (컴파일과정)-> .class -(실행)-> 프로그램 실행

   

- 에러=오류. 근데 이 말보단 예외가 발생했다고 말하는게 더 정확함.

- 시스템 에러를 제외한 비교적 덜 심각한 에러 ==> 예외(Exception)

 

 

ㅁ < 예외 처리 >

- 위와 같은 예외가 "발생"됐을 경우 "처리"하는 방법을 정의해두는 것.

- 예외처리를 하지 않고 그대로 예외가 발생되도록 두면 프로그램이 비정상적으로 종료됨.

 

(1) try~catch 구문

(2) throws로 떠넘기기

 

- CheckedException : 예외처리 구문을 반드시 작성해야만 하는 Exception들

- UnCheckedException : 예외처리 구문을 반드시 작성안해도 되는 Exception들

 

 

ㅁ 오브젝트 - Throwable - 여기서 Error와 Exception으로 나뉨.

- Error는 볼 필요가 없음. 하드웨어 문제라.

- 우리는 Exception 계열만 보면 됨.

- Exception계열로 RuntimeException, SqlException, IOException 등이 있음. 많음.

- 크게는 RuntimeException이냐 RunntimeException이 아니냐로 나뉨.

 

- RuntimeException은 주로 프로그램 실행시 발생하는 예외들.

- RuntimeException도 4가지가 아니라 더 있네?

- 런타임예외는 Unchecked Exception. 예외처리 안해도 되서.

런타임익셉션이 아닌거는 Checked Exception. 예외처리를 반드시 해야해서.

 

 

ㅁ < RuntimeException 후손 클래스들 >

- 프로그램 실행시 발생되는 예외 클래스들
- 공통점은 언제 이런 예외가 발생하는지 충분히 예측 가능한 상황이다.

충분히 예측 가능한 상황이기 때문에 적절한 조건을 통해서 예외가 발생이 안되도록 코드를 작성.

얘네는 예외처리구문을 작성할 필요가 없음. 즉 조건문으로 해결 가능.

(물론 예외처리구문을 작성해놔도 됨)

 

(1) IndexOutOfBoundsException 

- 얘도 부모임. 자식이 둘 이상 있음.

- 부적절한 인덱스로 접근시 발생되는 예외.

 

(2) NullPointerException

- 레퍼런스가 null인 상태에서 접근시 발생되는 예외.

 

(3) ArithmeticException

- 나누기 연산시 0으로 나눠질 때 발생되는 예외

 

(4) ClassCastException

- 허용되지 않는 형변환시 발생되는 예외

 

(5) NegativeArraySizeException

- 배열 할당 과정에서 배열의 크기를 음수로 지정하는 경우 발생되는 예외.

 

 

ㅁ RuntimeException == UnCheckedException

- 예외처리구문이 필수는 아니다.

- if 문 : 애초에 예외 자체가 발생되기 전에 소스코드 핸들링

- try ~ catch 문 : 예외가 발생됐을 경우 처리할 구문을 작성해두는 것.

- if 또는 예외처리구문 (  if문이 권장사항 )

 

 

ㅁ CheckedException 

- 반드시 예외처리구문을 작성해야 함.

- 조건문을 제시할 수 없음. 예측이 불가능하기 때문에. 

- 외부 매개체와 입출력이 일어날 때 주로 발생 (IOException, SqlException)

 

 

ㅁ Scanner와 같이 키보드로 값을 입력받는 방법이 있음.

- BuffredReader를 이용.

- 스캐너는 기본자료형에 해당하는 타입으로 읽어들일 수 있음. nextInt, nextDouble ...

- 버퍼드리더는 문자열로만 읽어들일 수 있음. 

 

- BuffredReader 객체는 생성시 기본 생성자가 없음. 매개변수를 줘야 함.

- 키보드로 값을 입력받는 용도로 생성하려면 다음과 같이 생성해야 함. 

 

BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );

String str = br.readLine();  //  컴파일 에러로 빨간 밑줄로 알려줌. 반드시 예외처리 하라고.

 

 

ㅁ 예외처리방법1

- (방법2는 메소드 선언부에 메소드 내에 발생할 수 있는 예외를 throws로 떠넘기는거)

 

public void method() {

 

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in) );

 

    System.out.print("아무거나 입력 :");

 

    try {

         String str = br.readLine();

         System.out.println("사용자가 입력한 값 : " + str);

    } catch (IOException e) {

         System.out.println("예외가 발생했습니다.");

    }

 

// IOException관련된 애들은 언제 예외가 발생할지 예측이 불가능해서 지금 예외 발생시키는 것도 불가능.

// 뭘 입력해도 잘 출력될거임.

// 예외처리구문을 반드시 써야한다.

 

    System.out.println("프로그램을 종료합니다.");

 

}

 

'클라우드 활용 자바개발자 양성과정 > 01. JAVA 프로그래밍 언어 활용' 카테고리의 다른 글

13. 컬렉션 Collection  (0) 2024.07.10
10. API  (0) 2024.07.05
08. 상속 Inherit & 09. 다형성 Polymorphism  (1) 2024.07.03
07. 객체 배열  (0) 2024.07.02
06. 객체  (0) 2024.06.27