ㅁ < 에러 종류 >
- 시스템 에러 : 컴퓨터의 오작동으로 인해 발생하는 에러 (소스코드로 해결 안 됨)
- 컴파일 에러 : 컴파일시 발생되는 오류. 소스코드 문법상 오류 (빨간줄) => 소스코드로 해결(개발자의 실수)
- 런타임 에러 : 프로그램 실행중 발생되는 오류. 소스코드 상에는 문제없지만 프로그램 실행시 오류
(개발자 혹은 사용자의 실수)
- [ 논리 에러 : 문법적으로 문제 없고, 실행시에도 문제 없음. 그러나 프로그램 의도상 맞지 않은 것 ]
- 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 |