날아라쩡글이의 블로그입니다.

Exception ,throw ,try~catch문 본문

중앙 HTA (2106기) story/java story

Exception ,throw ,try~catch문

날아라쩡글이 2021. 10. 8. 19:39
반응형

예외처리 

  • 예외처리란 프로그램 실행 시 발생할 수 있는 오류에 대비하는 것으로 프로그램의 비정상적인 종료를 막고, 실행상태를 유지하는 것
  • 에러의 종류 
    1. 에러 (Error)
      • 시스템, JVM의 잘못으로 발생되는 문제 
      • 개발자가 해결할 수 있는 문제가 아님 
      • 예외처리의 대상이 아님
      • 시스템 관리자나 서버관리자가 확인 후 문제를 고칠 수 있다. 
      • 왠만해서는 발생되지 않으며, 치명적인 것이다. 
    2. 예외 (Exception)
      • 개발자의 코딩실수로 인해서 일어난다. 
      • 사용자가 잘 못 사용할 수 있다는 의미로 잘 못 사용하게 되면 원래의 프로그램이 꺼져버리기 때문에 예외처리 메세지를 보낸다. 
        • 사용자입장에서는 황당할 수 있기 때문에 꺼지지 않게, 어디에서 문제였는지를 알려준다. 
      • 중단되지 않게 하기 위해 에러 메세지를 출력한다. 
      • 예외 에러를 표시하기 위해서 예외 메세지가 출력된다. -> 코드를 변경하는 것은 상황이 변동 되었다. 
    3. 이전 서버 프로그램

현재 서버 프로그램

 

요즘에는 오류가 날때에는 오류페이지 컨텐츠를 보내게 된다. 지금은 예전에 생각한 예외처리가 바뀌었다. 

  • 이전에는 개인별 컴퓨터에서 다운로드가 되고 사용자가 잘 못 사용하게 되면 중단되어 꺼져버리기 때문에 try catch문을 사용해서 유지가 되도록 만들었다. 
  • 그러나 지금은 오류페이지 컨텐츠를 보내기 때문에 예전처럼 try- catch문을 사용하지 않고, 웹의 경우는 잡는게 목적이 아니다. 
  • 요즘에는 예외 일괄 처리를 담당하는 부분을 프론트컨트롤러(자동화작업)에 있기 때문에 Spring의 서버에서도 에러가 발생한 경우 에러페이지를 보여달라고 코딩을 진행한다. 
  • 사용자도 웹기반으로 이용을 하고 있기 때문에 try - catch문을 강제하고 있지 않다. 발생된 예외가 프론트 컨트롤러까지 가게 두게 된다. 이제는 없애지 않는다.

예외(Exception)

  1. uncheckedException
    • RuntimeException클래스와 그 자식 클래스들이다. 
    • 주로 개발자의 코딩 실수로 발생되는 오류들이다. 
      • 이클립스 내부에서 빨간줄을 보내줘서 신경 쓸 필요가 없다. 
      • 적절한 예외처리 해주고, 기억할 필요가 없다. 
    • 컴파일러가 예외처리 여부를 체크하지 않는다. 
    • 소스코드 고치기 전까지는 예외가 발생한다. 
    • 예외처리해도 근본적인 원인인 소스코드를 고쳐야한다. 
    • 예외처리 무용론 이라는 이야기가 나왔고, 예외 발생이 되면 어떤건지 알고, 전해주고, 고치면된다. 
    • 장애지점이 서버이기 때문에 굳이 바꿀 필요가 없다는 이야기가 나왔다. 
  2. checkedException
    • Exception클래스와 Exception클래스의 하위 클래스중에서 RuntimeException클래스의 하위클래스가 아닌 예외 클래스다. 
    • 사용자의 잘못된 사용으로 인해 발생하는 오류들이다. 
    • 컴파일러가 예외처리 구현여부를 반드시 체크한다. 
      • 예외처리 관련 코드가 구현되어있지 않으면 컴파일 오류가 발생한다. 
      • 최신의 라이브러리나 프레임워크에서는 CheckedException의 사용비중이 점점 줄어들고 있다. 

예외처리

  • try - catch 구문
    • try{
    • 예외발생이 예상되는 수행문; 
    • 예외발생이 예상되는 수행문; 
    • 수행문
    • } catch(예외클래스 타입 변수명) {
    •  
    • } catch(예외클래스 타입 변수명){ 
    •  
    • } catch(Exception 변수명) {
    •  
    • }

      • try는 1개와 catch블록 1개가 일반적이다. 
      • try는 1개여야하고, catch블록은 여러개가 가능하다. 
      • try예상되는 수행문을 입력하고, 각기 다른 예외가 발생할 수 있어서 catch는 여러개를 작성한다. 
      • catch에 순서가 있다. 
        • 부모는 아래에 작성하고, 자식은 위에 작성한다. 
        • 수행문은 상관없다. 상속관계가 아닌 객체들도 상관없다. 
      • try에서 예외발생이 예상되는 수행문의 경우 변수명으로 예외가 들어가게된다. 
      • 마지막에 Exception을 작성한 이유는 생각도 못한 예외가 발생하게되면 클래스 형변환으로 적용되어, 어떤 예외라던지 전부 catch가 가능하도록 보험용으로 작성을 한것이다. 
      • catch블록에서 예외를 잡지않으면 프로그램이 비정상적으로 종료가 되는데, 그렇기 때문에 어떤 페이지에서 외국어처럼 글자가 깨진것을 확인할 수 있을 것이다. 그것이 예외처리가 제대로 되지않은 부분이다.
      • catch블록에서의 작업내용
        • 발생한 예외정보를 로그로 기록하기 
        • 사용자에게 예외발생원인 안내하기 
        • 개발자에게 오류수정을 위한 디버깅 메세지를 출력하기 
          • printStackTrack();
        • 발생한 예외를 다른 예외로 바꾸기 
        • 예외 발생시 수행문을 종료하고 즉시, catch블록으로 이동한다. 
  • throw구문
    • throw로 예외처리를 위임하는 것이다. 
    • 메소드에서 발생하는 예외를 직접 처리하지 않고, 그 메소드를 호출하는 측에서 예외처리를 위임하는 것이다. 
    • throws키워드를 사용해서 예외처리를 위임할 수 있다. 
    • 해당메소드에서 예외처리에 관련한 코드를 작성할 필요가 없다. 
    • 예외처리를 각각의 메소드에서 직접 개별적으로 처리하지 않고, 한 군데에서 일괄처리하게 만들 수 있다. 
    • public void method() throws 예외클래스명, 예외클래스명,...{
    • 예외발생이 예상되는 수행문;
    • } --> 예외클래스명이 몇개가 되던지 상관없다. 

이렇게 try catch로 오류를 잡을 수 있다. 

예외처리를 위임하기

  1. new FileWriter(), write(), flush(), close() 메소드가 IOException의 처리를 writeText()에게 위임함
  2. writeText()메소드는 IOException의 처리를 main()에게 위임함.
  3.  main()메소드는 IOException의 처리를 JVM에게 위임함
    • JVM에게 예외처리를 위임하는 것은 예외처리를 하지 않는 것과 동일하다. 
    • 마지막 처리는 꼭 해야한다. 프론트 컨트롤러에서는 꼭 해야하는 것이다. 안그러면 JVM에게 넘어가서 파일이 죽어버린다. 
    • 몇개를 떠넘겨도 상관없다. 나중에는 사용자정의예외처리로 한번에 예외처리를 진행할 예정이다. 
반응형

'중앙 HTA (2106기) story > java story' 카테고리의 다른 글

싱글톤 객체  (0) 2021.11.21
추상화와 인터페이스 정리  (0) 2021.09.28
내부 클래스, 익명클래스  (0) 2021.09.28
추상클래스  (0) 2021.09.26
추상화  (0) 2021.09.24
Comments