Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 자바 4강 예외처리 본문

Java

스파르타 부트캠프 자바 4강 예외처리

H.S-Backend 2024. 5. 11. 19:22

자바는 객체지향언어

객체지향이란 현실세계와 비슷한 구조라고 생각하면된다.

현실 세계 기반으로 생각을 한다는 가정하에

우리는 수많은 선택에 놓이고 하루에 사람이 600번이상의 선택을한다고 한다.

 

그런 만큼 우리는 수많은 상황에 놓이게 될 때 

선택을 어느정도는 예상해볼 수 있다.


Error(오류) 와 Exception(예외)

오류는 일반적인 상황에서 해결이 불가능하다.

이미 구현되어 실행중일 프로그램에 오류가 발생한다? 종료해야된다.

오류가 발생함으로

왜 발생했는지를 알고 대응을 해야한다.

Checked Exception(확인된 예외)와  Unchecked Exception(확인되지 않은 예외)

3을 입력하라고 분명 명시를 했는데 Client가 실수로 4를 입력할 수 있지않나?

(충분히 생각할 수 있다)

그렇게 확인해서 예외처리를 진행을 해야하고?

안그러면 에러가 발생하여 종료하게된다.


컴파일이란

프로그래밍언어를 작성한 코드가 컴퓨터가 이해할 수 있는 언어로 변환되는것

프로그램이란

컴파일된 코드(파일)는 컴퓨터가 이해하고 실행 시키는 모든것


컴파일에 에러가 발생한다면

기초적인 문제로 들어가보면 좋다.(문법문제)

사람으로 생각해보았을 때

책을 읽다가 갑자기 이집트어가 나온다면 읽을 수 있나?

문법에 맞게 고치면되는것이다.


런타임  에러(404)

Client가 프로그램 실행 도중에 맞닥뜨리게 되는 예외


확인된 예외(Checked Exception)

예외를 충분히 고려해볼 수 있음에도 불구하고

예외처리를 하지않아서

고객이 프로그램 사용중에 종료를 하게 할것인가?

책임은 개발자 몫이다.


확인되지 않은 예외(Unchecked Exception)

프로그램 실행 중에 확인되는 예외이다.

예외처리가 반드시 필요하지는 않다.


예외정의

public class Exam1 extends Exception{
     public Exam1(){
         super("위험한 행동을 하면 예외처리를 해야한다");
     }
}

public class Exam1 extends Exception{
     private final Boolean just = true;
    
     //throws 던지다
    public void thisMehthodIsDangerous() throws Exam1{
        if(just){
            throw new Exam1();
        }
    }
    
    public Exam1(){
         super("위험한 행동을 하면 예외처리를 해야한다");
     }
     
     

throws 

메서드 이름 뒤에 붙는다.

이 메서드가 어떤 예외사항을 던질 수 있는 지 알려주는 예약어

여러 종류의 예외 사항을 적을 수 있다.


throw

메서드 안에서 실제로 예외객체를 던질 때 사용하는 예약어

실제로 뭘 던질것인지를 정의하고 사용해야한다.

사용 후 종료된다.

 

예외처리를 할 때 알고있어서 예외처리를 하지 않았나?

그렇다면 고객에게 미리 알려주어 위험하다는것을 인지시키고 프로그램을 종료하지않게 하면된다.

 

public class Exam1 extends Exception{
     private final Boolean just = true;
     OurClass ourClass =new OurClass();
      //throws 던지다
     public static void main(String[] args) {
         try{
             //시도
             ourClass.thisMethodIsDangerous();
         }catch(OurBadException e){
             //2.예외 발생 후 handling
             System.out.println(e.getMessage());
         }finally {
             //3. 예외 발생 여부 상관없이 실행시키는 코드
             System.out.println("우리는 방금 예외를 처리하였습니다.");
         }
         
     }

위험 감지했다면 

try 시도한다{

일단 그래도 실행시킬 메소드

}

catch 잡는다 {

중괄호 안에 try하다가 예외가 났다를 알려준다

)

finally 마침내{

무조건 알려주고 종료

}


예외 클래스 이해

문제에 직면하면

할 수 있나(Exception)? 못하나(Erro)? 

정의

결국은 문제를 추상화(생각하고)

일반화(풀어보고, Error, Exception)

구체화(Checked Exception, Unchecked Exception)


자바의 Throwable Class


Exception클래스 구조


수많은 에러와, 예외처리


Chained Exception(연결된 예외)

예외는 또 다른 예외를 유발할 수 있다.

문제는 또다른 문제를 야기할 수 있는것

Checked Exception을 Unchedcked Exception으로 Wrapping한다.

public class Exam3 {
    public static void main(String[] args) {

        try {
            //예외 생성
            NumberFormatException ex = new NumberFormatException("가짜 예외 이유");

            //initCausse() -> 지정 예외를 원인 예외로 등록하는 메소드
            //원인 예외 설정(지정 예외를 원인 예외로 등록한다)
            ex.initCause(new NullPointerException("진짜 예외 이유"));

            //throw
            throw ex;
        }catch(NumberFormatException ex){
            //예외 로그를 출력
            ex.printStackTrace();
            //예외 원인 조회 후 출력
            ex.getCause().printStackTrace();
        }
        //cheked excpption을 감싸서 unchecked exception 안에 넣기
        throw new RuntimeException(new Exception("이것이 진짜 예외 이유"));
    }

    }
}

예외 복구하기

public String getDataFromAnotherServer (String dataPath){
try{
    return anotherServerClient.getData(dataPath).toString();
}catch(GetDataException  e){
    return defaultData;
}

예외처리 회피하기

public void someMethod() throw Exception{.....}

public void someIrresponsibleMethod() throw Exception{
    this.someMethod();
}

예외 전환하기

public void someResponsibleMethod() throws MoreSpecificException{
    try{
        this.someMethod();
    }catch(IOException e) {
        throw new MoreSpecificException(e.getMessage());
    }
}

 

 

https://hs-backend.tistory.com/58

 

스파르타 코딩클럽 부트캠프 (Java 문법 4장)

오류(Error) 일반적으로 회복이 불가능한 문제이다.시스템 레벨에서 아니면 주로 환경적인 이유로 발생한다.코드 문제로 발생하는 경우도 있으나 발생한다면 회복이 불가능하다.예외(Exception) 

hs-backend.tistory.com

 

반응형