본문 바로가기
CSE/CP1 이론

CP1_07.객체지향 프로그래밍_Advanced_파일과 예외처리

by 0/0 2024. 6. 17.
1. Basics 클래스, 객체, 변수, 메서드 // 생성자, 초기화
2. Advanced 상속, 오버라이딩 // package, import, modifiers, 다형성 // 추상클래스, interface, 파일과 예외처리, 내부클래스
9. 파일과 예외처리 1. 파일 입출력 클래스
2. 파일 쓰는 법
3. 컴파일 오류를 없애는 방법 2가지
4. try-catch 더 알아보기
ㄴ4.1. ArithmeticException
ㄴ4.2 try-catch문 실행순서
ㄴ여러 catch 문
5. 프로그램 오류
6. 예외 클래스
7. finally
ㄴ7.1. finally
ㄴ7.2.자원 자동 변환
8. IOStream의 중첩
9. throw

 

9.1. 파일 입출력 클래스

-XXInputStream, XXReader: 읽기(입력)

-XXOutputStream, XXWriter: 쓰기(출력)

파일 입출력 클래스

 

9.2. 파일 쓰는 법

'3단계'

-파일을 열고

FileOutputStream outfile = new FileOutputStream("c:/out1.txt");

-파일에 쓰고

outfile.write("test writing!".getBytes());

-파일을 닫음

outfile.close();

 

 

9.3. 컴파일 오류를 없애는 방법 2가지

Exception 처리를 하지 않았다는 오류

=> Exception 처리를 하지 않았다는 오류

 즉, 프로그램에서 제어할 수 없는 상태가 발생할 수 있다는 의미

  • 컴파일 오류를 없애는 방법 1_throw 삽입

  • 컴파일 오류를 없애는 방법2_try-catch 삽입
try{
	FileOutputStream outfile = 
    		new FileOutputStream("c:/out1.txt");
   	outfile.write("test writing!" .getBytes());
    	outfile.close();
} catch (IOException e) {
		//예외가 발생했을 때 처리 코드를 여기에 넣기 ex.close
}

try 블록: Exception이 나타날 수 있는 구간

catch 블록: 처리 코드

try-catch 삽입 후 실제 Exception 발생

 

9.4. try-catch 더 알아보기

 

 9.4.1 0으로 나누기_ArithmeticException
정수는 0으로 나누기 불가(실수는 가능) -> 예외처리구문 추가

ArithmeticException

 9.4.2 try-catch문 실행 순서

try-catch문 실행 순서

  • 정상 실행
    예외가 발생하지 않았으므로 catch 블럭의 문장 실행되지 않음
  • 예외 발생
    System.out.println(0/0); 에서 예외가 발생했으므로 try 블록을 바로 벗어남
    -> catch 블럭의 문장이 실행됨
    -> 전체 try-catch문을 벗어나서 다음 문장(System.out.println(6); 실행

 9.4.3 여러 catch 문_모르겠다
서로 다른 종류의 Exception 처리 방법

여러 catch 문

 9.4.4 Exception 참조변수

  • printStackTrcae(): 예외발생 당시의 호출스택(Call stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력
  • getMessage(): 발생한 예외클래스의 인스턴스에 저장된 메시지를 변환

Exception 참조변수

9.5 프로그램 오류

컴파일 에러: 컴파일 시 발생

런타임 에러: 실행할 시 발생

  • 에러
    -프로그램 코드에 의해서 수습될 수 없는 심각한 오류
    -메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)
    -프로그램의 비정상 종료 야기
  • 예외
    -프로그램의 코드에 의해서 수습될 수 있는 다소 미약한 오류
    -프로그래머가 작성해놓은 코드를 통해 해결 가능

논리적 에러: 실행은 되지만, 의도와 다르게 동작

9.6 예외 클래스

- 계층구조

Java에서는 예외(Exception)도 객체이므로 클래스가 필요함 (오류(Error)도 객체)

예외 클래스 계층도

 

 

Exception의 상속계층도

*Exception 클래스들: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외

*RuntimeException 클래스들: 프로그래머의 실수로 발생하는 예외

 

-사용처

throws 옆에 써주는 것, catch 참조변수의 타입: Exception 클래스임

예외 클래스 - 사용처

 

9.7.1  finally

예외의 발생여부에 상관없이 실행되어야할 코드를 포함시킬 목적

try-catch문의 끝에 선택적으로 덧붙여 사용 가능 (try->(catch->)finally)

finally

*try블럭에서 return문이 실행되는 경우에도 finally블럭의 문장들이 먼저 실행된 후에, 현재 실행 중인 메서드를 종료함.

catch 블럭의 문장 수행 중에 return문을 만나도 finally블럭의 문장들은 수행됨.

 

9.7.2 자원 자동 반환

자원 자동 변환

 

9.9. throw

-1. 내가 발생시키는 Exception

: 인위적으로 Exception 발생시키기 - 얼마든지 가능

인위적으로 Exceptiln 발생시키기 얼마든지 가능

-2. 내가 만들어서 내가 throw_몰라

throw new MyException();

throw new MyException();

*주 사용처: Exception chaining