반응형
오랜만에 MySql 에서 벗어나 Java로 다시 돌아와 예외처리부분을 배웠다.
오랜만에 본 JAVA 코드는 낯설었지만 금새 다시 익숙해졌다 .
수업커리큘럼이 타이트한 탓인지 선생님이 진도가 빠르게 진행되어서 이해보단
선생님의 코드를 따라 쓰는데 급급했던 것 같다.
그래서 수업이 끝나고 따로 시간을 내서 유튜브로 생활코딩 '자바예외처리' 강의를 듣고 코딩을 따라 쓰고
내용을 정리해보았다. 같은 파트를 다른 영상으로 같은 내용이지만 다른 설명으로 2회차를 들으니 갈피가 서는 느낌이
많이 들어서 지루하지 않고 나름 재밌게 잘들었다.
package day12_14;
public class ExceptionApp {
//1
// 자바에서는 0을 나눌수 없다 그래서 오류가 뜬다.
// 허나 어떤 프로그램은 24시간 돌아가야한다면
// 이런 오류를 만나 프로그램이 작동이 안하면 난감할 것이다.
// 이럴때 예외처리를 통해 오류가 발생하여도 그다음 프로그램이 작동하게
// 하는 것도 예외처리의 한 방법이 될 수 있다
//2
// 아래를 보면 알수있듯이 2를0으로 나누면 자바에서는 오류가 나오는데(ArithmeticException)
// 이럴때 예외처리인 try /catch문으로 감싸면 오류를 예외처리로 처리하고
// catch문을 작성할때 오류에 맞는 예외처리를 넣는것이 좋다. 그리고
// 안에 있는 코드를 실행후 그다음 코드가 실행되는 것을 볼 수 있다.
//3
// 하나의 try문의 예외처리할 문장을 여러개 넣는다면
// 첫번째 예외처리문을 만났을때 catch문을 실행후
// 바로 try/catch문을 빠져나간다. 그 다음 예외처리할 문장이
// 실행조차 안되는 것 같다.
public static void main(String[] args) {
//1
System.out.println(1);
try {
System.out.println(2 / 0); // ArithmeticException
}catch(ArithmeticException e){
System.out.println("잘못된 계산이네요");
}
System.out.println(3);
System.out.println(4);
//2
int [] scores = {10,20,30}; // 배열의 저장범위 바깥 데이터를 가져오려 할 때
try {
System.out.println(scores[3]); // ArrayIndexOutOfBoundsException
}catch(ArrayIndexOutOfBoundsException aiob){
System.out.println("없는 값을 찾고 계시네요~ ^^");
}
//3
try {
System.out.println(10);
System.out.println(2 / 0);
int[] scores2 = {10, 20, 30};
}catch(ArithmeticException e2){
System.out.println("헛짓거리하시네 ~");
}catch(ArrayIndexOutOfBoundsException ad){
System.out.println("그러게말여~");
}
System.out.println(15);
}
}
package day12_14;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class CheckedExceptionApp {
// IOException 을 발생시키는 코드를 발생해 보겠다
// Checked exception vs unchecked exception
// 전자의 경우 대표적으로 IOException이 있다.
// 전자의 경우 컴파일러에서 직접 예외처리를 했는지 검사하기 때문에
// 반드시 코드에서 예외 처리를 해주어야 한다.
// 후자의 경우
// 앞선 'Exception' 클래스에서 볼 수 있었던
// ArrayIndexOutOfBoundsException 나 ArithmeticException 와 같은 경우로
// 이와같은 예외처리는 따로 안해도 실행이 가능하지만
// 실행후 오류메세지가 나온는 것을 확인할 수 있다.
// 결과적으로 전자인 checked exception 같은 경우는 예외처리를 코드에서 무조건 해주어야하고
// 후자인 unchecked exception 은 코드 안에서 예외처리를 꼭 안해도 된다는 것
// 또한 이 두가지로 예외처리가 나뉜다는 정도를 알면 좋을 것 같다고 한다 생활코딩 따거께서
public static void main(String[] args) {
try {
FileWriter f = null;
f = new FileWriter("data.txt");
f.write("hello");
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package day12_14;
import java.io.FileWriter;
import java.io.IOException;
public class Finally_and_Resource {
// finally 와 resource
// 자바가 외부 프로그램에 엑세스 할때 생길수 있는 예외처리
// 대표적인 외부프로그램(리소스)으로는 파일, 네트워크, 데이터베이스가 있다.
// 다시, 리소스는 자바 내부의 데이터가 아니기에 예외처리가 많이 발생할 수 있다.
// 자바에서 리소스를 사용할때 자바는 리소스를 붙잡는 모종의 행위(?) 들이 있는데
// 파일은 나만 파일을 쓰겠어 .. ? 네트워크는 커넥션.. ? 아무튼 붙잡는 작업을 다하고
// 나면 리소스를 놔줘야하는데 놔주는 코드가 close() 이다.
// close()를 써주기 위해서는 다소 복잡한 과정이 있다.
// 일차적으로 아래에서 filewriter를 쓸때 예외가 발생할 수 있어 try/catch문으로 감싸고
// try문에 close를 쓴다면 try문에서의 예외처리가 발생한다면 close는 실행이 되지 않는다.
// 그렇기에 필요한것은 finally문안에다 close를 써주는 것인데 finally 문은 예외처리가 발생하건 안하건
// 무조건 finally문 안에 있는 내용을 실행시켜주는 것인데 그렇기에 finally 문안에 넣으면 빨간밑줄이 기다리고 있을터인데
// finally를 열고 close문을 쓰면 close가 try문안에서의 지역변수를 받을 수 없어 try문 밖에서 전역변수로 선언을 해야 오류가
// 안나온다. 그렇게 밖에다 또 선언하고 나면 또 빨간줄이 나오는 것을 확인할 수있는데 ~ 이번에는 또 finally 안에서 close를
// 실행하는데 있어서도 예외처리가 나올 수 있다는 것이다. 말은 그렇다 . 그래서 finally 안에서 또 예외처리를 해주어야 한다.
// finally 문 안에서도 예외처리를 또 해주면 비로소 빨간 밑줄을 안보게 될 수 있는데 이와 같은 방법은 너무 복잡하고 장황하다 .
// 이와 같은 방법을 해결하기 위해 try-with-resource 라는 신기술이 있다고 한다.
// try-with-resource
// java7 부터 추가함
// 위에서 봤듯이 위의 방법은 코드가 매우 장황해진다.
// 간단히 쓰는 방법을 사용하면
// 일단 try (close가 필요한 코드) {} catch{} 문
// 이런식으로 써놓으면 알아서 실행후 예외가 발생하건 안하건 마지막에 close를 실행해준다.
// 확연히 위와 간단해진 코드를 확인할 수 있다 .
public static void main(String[] args) {
FileWriter fw=null;
try {
fw = new FileWriter("data2.dat");
fw.write("hello");
} catch (IOException e) {
e.printStackTrace();
} finally{
// 만약에 fw가 null이 아니라면 close를 해라 ~
if(fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// try-with-resource
// try with resource statements
try (FileWriter f = new FileWriter("data.txt")){ // try 괄호 안에다가 close가 필요한클래스를 인스턴스하는 코드 입력
f.write("HELLO");
}catch(IOException e){
e.printStackTrace();
}
}
}
반응형
'JAVA & APP :국비지원 학원 복습 > JAVA' 카테고리의 다른 글
JDBC 집에서 백지상태에서 만들어본 삼광 (0) | 2020.12.21 |
---|---|
JDBC를 이용한 사원정보 프로그램 만들어보기. (2) | 2020.12.17 |
DAY1 자바,이클립스 설치 및 기본 용어 정리?(선행학습과정) (0) | 2020.10.28 |