[TIL] 1월 15일

yeon·2021년 1월 15일
1

자바의 정석 ch8 예외처리 exception handling

1. 예외처리

프로그램 오류

  • 컴파일 에러
    • 컴파일 시에 발생하는 에러
    • java.exe : 자바 컴파일러
    • 컴파일 에러 발생 시 터미널에서는 컴파일 에러 메시지가 뜬다.
    • 이클립스와 같은 IDE에서는 자동으로 컴파일을 해주어서 컴파일 에러 발생 시 빨간 줄이 뜬다.
    • 자바 컴파일러가 하는 일
      • 구문 체크 (문법이 맞는지)
      • 번역
      • 소스코드의 최적화
  • 런타임 에러
    • 실행 중에 발생하는 에러
    • 컴파일을 에러없이 마쳤다고 해서 끝이 아니다, 프로그램 실행 중에도 에러가 발생할 수 있다.
  • 논리적 에러
    • 작성 의도와 다르게 동작하는 것

자바의 런타임 에러

  • 에러(error)
    • 수습될 수 없는 심각한 오류
    • ex) Out Of Memory
  • 예외(exception)
    • 프로그램 코드에 의해서 수습될 수 있는 미약한 오류
    • 예외처리 : 처리할 수 있는 것은 예외의 발생에 대비한 코드를 작성해서 프로그램이 잘 동작하게 하는 것

예외 클래스의 계층 구조

  • Throwable 클래스

    • Exception(미약한 오류)
      • RuntimeException
      • IOException
      • ...
    • Error(심각한 오류)
      • OutOfMemoryError
      • ...
  • Exception 예외 클래스는 두 그룹으로 나누어진다.(415p 계층도)

    • Exception 클래스들과 그 자손 (RuntimeException과 자손들 제외)
      • 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
    • RuntimeException 클래스들과 그 자손
      • 프로그래머의 실수로 발생하는 예외

예외처리하기 - try-catch문

  • 프로그램 실행중 발생한 에러는 어쩔 수 없지만, 예외는 프로그래머가 예외처리를 미리 해주어야 한다.
  • 예외처리의 목적
    • 예외로 인한 프로그램의 비정상적인 종료를 방지하고 프로그램을 정상적으로 실행하도록 하는 것
  • if문과 달리, try, catch 블럭은 문장이 하나뿐이더라도 괄호{}를 생략할 수 없다.

예외의 발생과 catch 블럭

public class ExceptionEx7 {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        try {
            System.out.println(3);
            System.out.println(0/0);  // 예외발생! 
            System.out.println(4);    // 실행되지 않음
        } catch (ArithmeticException ae){
            if(ae instanceof ArithmeticException){
                System.out.println("true");
            }
            System.out.println("ArithmeticException");
        } catch (Exception e){
            System.out.println("Exception");
        }
        System.out.println(6);
    }
}

</> 실행 결과
1
2
3
true
ArithmeticException
6
  • try 구문 안에 있는 System.out.println(4); 는 실행되지 않는다.
    • 이 코드의 윗줄에서 예외가 발생해서 catch문으로 넘어가고, catch문이 실행된 후 catch문을 빠져나가기 때문이다.
  • System.out.println(0/0);
    • 이부분은 첫번째 catch 구문과 두번째 catch 구문 둘 다 해당되지만 catch 문이 여러개 있어도 발생한 예외 한개만 수행하면 아예 catch 문 밖으로 빠져나가게 된다.

오늘 한 일

  • 내가 요즘 노력하는 부분 중 하나가 '습관들이기' 이다. 스터디와 슬랙 채널에서 블로그 공유 등으로 TIL 작성과 자바의 정석 학습 이 두가지는 습관처럼 하고 싶다.
  • 학습정리에 나온 부분은 다 학습하지 못했다. 못한 부분은 주말에 하기
  • 자바의 정석 ch8 예외처리

Todo

  • 객체지향의 사실과 오해 구매
  • 구매한 책들을 다 앞부분만 봤는데 한 권이라도 끝내보자...ㅎㅎㅎ
  • 스프링 입문을 위한 자바 객체 지행의 원리와 이해
    • 스프링 시작하기 전에 꼭 읽고 싶다.
  • SOLID 원칙

Reminder

  • 너무 힘들고 아무것도 하기싫으면 집어치우고 엎드리자. 개인적으로 이 방법이 잘 통한다. 1-20분 정도 엎드려서 얕은 잠에 들었다 깨면 머리가 맑아져서 이전에 보이지 않았던 부분들이 보이는 것같다. 내가 기억했으면 한다. 머리아프고 하기싫으면 너무 지쳐있는 상태이니 잠깐의 휴식을 취하도록
  • 여태까지는 노션에 내가 학습한 걸 정리, 받아적는 수준으로 적고, 이후에 기억이 안나서 그 내용을 다시 볼때 적어놨던 내용을 다시 보고 이해하고 이런식으로 학습을 해왔다. 이제는, 학습한것을 내 언어로 정리하는 것을 시작해야할 것 같다. 이제 노션에 정리는 정리대로하고, 빈 노션 페이지에 목차만 적어두고 그에 대한 내용을 적어보는 시간을 가지자.
  • 떠오르는 생각들에 대해서 다 적고 끊임없이 스스로를 remind 하자, 항상 효율성을 잊지 않고 비효율적이고 불필요한 것들은 과감하게 없애자.
    • 바로바로 적어야 잊어버리지 않는다.
    • 내 기억력을 믿지 말자 ㅋㅋ

4개의 댓글

comment-user-thumbnail
2021년 1월 15일

"내 기억력을 믿지 말자 " 공감합니다ㅋㅋㅋ저도 연 본받아서 오늘부터 자바 공부 다시 달리겠습니다!

1개의 답글
comment-user-thumbnail
2021년 1월 15일

자바의 정석 지금처럼 꾸준히 해서 끝내구 언릉 스프링 입문을 위한 책 달려요~!
정말 하기 싫을때 엎드려 자는거 공감합니다. 휴식은 안보이는걸 보이게 하는 만큼 효과적이더라구요!

1개의 답글