지금까지 예외를 사용할 때 나는 새로운 IllegalArgumentException();
우테코는 예외처리를 하지만 뭔가 잘못된건가…? 나는 용어에 대해 혼란스러워하기 시작했다.
저와 같은 분들이 또 계실까봐 정리를 해봤습니다!
항상 댓글에 잘못된 정보를 올려주세요!
벌레무엇인가요
– 프로그램 부조 또는 비정상 종료기쁘게 원인프로그램 오류라고 합니다.
실수그리고 예외사이의 차이
실수코드를 변경하여 돌이킬 수 없는 심각한 실수이며 일단 발생하면 복구가 어렵습니다.
예) OutOfMemoryError, ThreadDeath, StackOverflowError 등
예외비교적 덜 심각한 오류이며, 코드 수정으로 해결할수있다.
오늘 포스팅에서 다룰 내용은오전!
벌레의 분류
행동의 장소에 따라 컴파일 오류그리고 런타임 에러로 분류
컴파일 타임 예외 컴파일 시 발생 = 체크된 예외 = 체크된 예외
지속 예외(지속 예외) 프로그램 실행 중 발생 = 확인되지 않은 예외
논리적 예외(논리적 예외) 의도와 다른 행동(메인에서 다루지 않음)
Exceptions의 내용을 처음 봤을 때 용어 때문에 많이 헷갈렸던 경험이 있었는데,
편집 예외컴파일 타임에 예외 처리가 수행되지 않으면 직접 확인도 하지 않기 때문에 CheckedException이라고 합니다.
반면에 지속 예외예외가 발생할지 여부를 컴파일 타임에 결정할 수 없기 때문에 런타임 오류는 확인되지 않으므로 확인되지 않은 예외라고 합니다.
뛰어난 클래스의 상속 구조
모든 클래스의 상위 개체 클래스 아래 던질 수 있는 클래스가 존재합니다.
위에서 언급한 예외(예외) 및 실수(오류) 클래스는 Throwable 클래스를 직접 상속합니다.
관심 있는 Exception 클래스를 보면, 런타임 예외 수업과 다른 클래스존재합니다.
Exception 클래스 아래의 클래스 중 RuntimeException을 제외한 모든 IOException은 컴파일 오류와 관련이 있습니다.
예외는 특별한 것이 아니라 클래스라는 사실을 잊지 말아야 합니다.
그렇다면 사용자 정의 예외를 생성하면 어떻게 될까요?
예외에 대한 모든 메서드를 포함하는 새 클래스를 만들어야 합니까?
괜찮습니다. 하지만 다른 사람이 이미 만든 코드를 사용하고 싶습니다. 사유지그렇게
내가 정의한 클래스 옆에 조상의 이름을 확장당신이해야 할 일은 그것을 적어 두는 것뿐입니다!
public class 내가_만든_RuntimeException extends RuntimeException {
}
public class 내가_만든_CompileException extends Exception {
}
컴파일 예외 (예외의 자손)
컴파일 예외 = 체크된 예외 = 체크된 예외
– 주로 외부 영향에 의해 발생
– 종종 사용자 행동에 의해 발생
– 예) FileNotFoundException(존재하지 않는 파일명 입력), DataFormatException(잘못된 데이터 형식 입력) 등
컴파일 예외를 던질 수 있는 코드가 처리되지 않으면 컴파일조차 되지 않습니다.
현재 처리에 대해 다른 포스팅에서 다루겠습니다!
따라서 프로그램에서 예외가 발생할 확률을 없애고 안정적으로 만들지만 코드를 가져와서 사용하는 과정이 매우 불편하다.
런타임 예외 (RuntimeException의 자손)
런타임 예외 = 확인되지 않은 예외
– 주로 프로그래밍 오류로 인해 발생할 수 있는 예외
– 예) ArrayIndexOutOfBoundsException, NullPointerException, ClassCastException, ArithmeticException 등
런타임 예외는 처리 없이 성공적으로 컴파일됩니다.
즉, 예외 처리는 선택적일 수 있습니다.
RuntimeException이 발생할 수 있는 모든 장소를 처리한다고 생각한다면… 참조 변수와 배열이 사용되는 모든 곳에서 예외를 처리해야 하지만 매번 그렇게 할 필요가 없어서 너무 기쁩니다!
그렇다면 컴파일 타임 예외 및 런타임 예외입니다. 언제 사용해야 하나요?
답이 없다!
권장 사항이 있지만 기준이 모호합니다.
어떤 사람들은 그런 기준이 있다고 합니다.
호출 메서드가 예외를 사용하여 유용한 작업을 수행할 수 있는 경우 컴파일된 예외를 사용합니다.
호출하는 메서드가 예외를 처리할 수 없는 경우 Unchecked Exception을 사용하거나 예외를 포착하여 문제를 해결합니다.
명확하지 않은 경우 런타임 예외를 사용하십시오.
나는 여기있다 의미 있는 일그것에 대한 판단은 전혀 없습니다.
의미가 있는 것은 세 번째 줄뿐이므로 지금은 extends RuntimeException을 사용하겠습니다!
Uteco에서 이 표준에 대해 이야기하면 아무도 그렇게 하지 않습니다! 기준에 맞지 않습니다.
컴파일러 예외 장점은 빨간색, 단점은 파란색
Java 프로그래머는 현재 일부 개발 철학이 컴파일되지 않을 정도로 컴파일 예외를 싫어합니다. 예외 완전히 삭제해야 할 내용이 있다고 합니다. 그러나 일부 사람들은 컴파일할 때 예외를 잘 처리합니다. 나는 그것을 처리하기 위해 나 자신을 강요해야합니다 두려움을 지루함으로 바꾸다이 점에서 TDD(Test Driven Development)와 다소 닮아 있다는 의견도 있었다.
항상 예외를 먼저 처리하기 위해 컴파일 타임 예외를 사용하는 경우, 코드가 지저분하고 성가시다 할 일. 매번 실행되는 try/catch 블록이 있는 복잡한 코드를 오용하는 경우그러나 컴파일하려면 반드시 처리해야 합니다. 프로그램의 안정성이 높아집니다.. 당연히! 컴파일 예외는 완전히 안전하지 않습니다.. 호출자가 예외를 잘 처리하면 안전합니다…
일부는 컴파일 시간에 확인되고 다른 일부는 컴파일 후 런타임에 확인됩니다…
개발이 진행됨에 따라 판단 기준이 끊임없이 변한다고 하는데 어렵습니다.