Search
Duplicate

삽추) 예외처리 try catch, throw, throws, finally

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Java
Scrap
태그
9 more properties
삽추란 : 삽질의 추억
개발을 하면서 수많은 삽질을 하게 되는데 이 순간이 뙇 삽질이다!하며 오지 않고 가랑비에 옷 젖듯이 자연스럽게 찾아오는 것 같다
풀스택 개발자(라고 하고 백,프론트 둘다 무지렁이라고 읽는다)로 프로젝트를 하는 중 로그인 버튼을 누르면 화면이 reload가 되는 어처구니 없는 상황이 생겼다. (심지어 라우터간지 react인데!!)
실무를 하면서 느낀건데 jsp처럼 화면이 reload된다는건 약간 촌스러운(?) 상황으로 여겨지는 것 같다. (우리 회사 기준일 수 있음)
개발 고인물 사수님까지 붙어서 원인을 찾아냈다.
우리의 해결 flow는 아래와 같다.
1.
프론트 단의 button이 form안에 있어서 submit 된건가? (흔한 실수- 하지만 아니였음)
2.
axios를 써서 그런가? fetch를 써볼까 (아닌 것 같음)
3.
로그인 버튼을 누르고 성공이면 reload가 되지않음을 보고 사수님이 백단쪽 문제라는걸 발견하심 역시 갓사수님..
해결 - 백단에서 인증확인 메소드 catch문의 throw e; 라고 써있는 부분을 고쳐줬다.
이것은 security+jwt를 적용하면서 제대로 확인 안해서 생긴 문제 + 예외처리에 대한 무지의 결과였다
충격을 먹고 예외처리를 씹어 먹기로 했다.

try - catch

public void Test() { try { System.out.println( 10 / 0 ); // try안에 예외가 발생할 수도 있는 코드 System.out.println ( "catch 괄호 안의 예외가 catch될 경우 이 문구는 안나옵니다" ); } catch(ArithmeticException e) { //어떤 예외를 catch할지를 적어줌 System.out.println("0으로 나누어서 예외발생"); System.out.println("ArithmeticException 예외일 경우 출력돼요!"); } catch(Exception e) { //어떤 예외든 catch됨(위 catch에서 예외발생시 실행X) System.out.println("예외 처리"); //catch된 후 실행할 코드 System.out.println("ArithmeticException 예외가 아닌 다른 예외일경우 출력돼요!"); } }
Java
복사

try - catch - throw

throw : 예외를 인위적으로 발생시키는 것
반드시 처리해 줘야할 예외를 명시적으로 예외를 발생시켜 유지보수에 도움됨
public void Test() { try { throw new Exception(); } catch(Exception e) { System.out.println("Test 메소드에서 예외 처리됐어요!"); } } // 출력 : Test 메소드에서 예외 처리됐어요!
Java
복사

throws

throws : 자신을 불러온 메서드로 예외를 던진다
"호출한 곳에서 처리해주겠다"
public void Test() { try { A(); } catch(Exception e) { System.out.println("Test 메서드에서 예외가 처리됐어요!"); } } public void A() throws Exception{ //throws에 명시된 예외가 발생할 경우 throw new Exception(); //A메서드를 호출한 메소드로 예외를 던진다 }
Java
복사
A메서드에는 try/catch문이 없기 때문에 예외를 발생시켜도 처리해줄 곳이 없다.
이런 경우 호출한 곳에서 처리해주겠다라고 생각하면 된다

finally

finally : Scanner같이 꼭 close를 해주어야한다면 finally가 없을 경우 모든
catch구문 끝에 써주어야한다
이럴 경우 finally에 close해주면 예외가 발생하든 안하든 반드시 수행한다.
public void Test() { Scanner test = new Scanner(System.in); try { //~~~~~~~ 기타 구문 수행 test.close(); } catch(Exception e) { test.close(); } }
Java
복사