exception이 발생하였을 때, 재시도를 r회 하는 로직은 생각보다 많이 쓰이게 됩니다. 어떻게 하는지 간단하게 알아보겠습니다. 예제를 하나 보겠습니다. 위 예제는 t = 1/0을 10번 재시도 하는 예제입니다. 보시면, t = 1 / 0 부분에서 계속 ZeroDivisionError가 뜨게 됩니다. 이 때, r이 retry보다 작으면 continue를 하고, 그렇지 않으면 raise를 하게끔 하였습니다. retry는 재시도 횟수인데요. 1부터 retry회까지 카운트가 됩니다. 고로, r이 retry보다 작다면 continue문을 타고, retry번 이상 재시도를 했다면 raise, 그러니까 예외를 발생시켜버리게 됩니다. 10번 재시도를 하고, ZeroDivisionError가 뜨게 됩니다. 저 코드..
Exception 검색 결과
java에서 예외와 에러의 차이가 무엇일까요? 공식 문서는 단 2개의 키워드로 답을 주고 있습니다. abnormal, serious, shouldn't not try catch. 각각, 비정상, 심각한, catch를 하지 말아야 하는을 의미합니다. 여기에 속한 대표적인 것들 중에서는, OOME와 stackoverflowError가 있습니다. 왜 이 둘이 예외가 아닌 에러인 건지 문득 궁금해 졌습니다. 위 프로그램을 보면, f라는 메서드가 계속 재귀 호출이 되고 있음을 알 수 있습니다. 실제로 이 프로그램은 아래와 같은 에러를 떨굽니다. StackOverflowError. 이것은 재귀 함수가 종료 조건 없이 계속 타고 들어갈 때 발생할 수 있습니다. 이 예외를 타고 들어가면, VirtualMachineEr..
이펙티브 자바에 나오는 깊숙한 내용은 나중에 하기로 하고, try with resources 문에 대해서 간략하게 언급해 보도록 하겠습니다. 닫아야 할 자원. 이것들은 생각보다 어렵지 않게 찾을 수 있습니다. Stream, DB connection 등이 이에 속합니다. 저 또한 프로그램을 이런 식으로 작성하곤 했습니다. 대충 A라는 친구를 새로 생성합니다. 이것을 새로 생성하면 내부적으로 리소스를 오픈하는 작업을 수행합니다. 흔히들 생각하는 인풋 스트림이나 DB connection 등이라고 생각하시면 됩니다. try 안에서 do work를 합니다. 그런데, try 내부에서 a.close를 호출하면 안 됩니다. 왜냐하면, 중간에 Exception이 걸려서, main 함수에서 catch가 되는 경우에, a...
최근댓글