Cooper's devlog1. 강의 링크https://www.youtube.com/watch?v=g-nsT3NRK2o&list=PLqaSEyuwXkSppQAjwjXZgKkjWbFoUdNXC&index=45 2. 학습 목표QuestionController 중복코드 제거 및 리팩토링
3. 과정httpSessionUtils.isLoginUser(session) 및 isSameWriter 중복 코드 리팩토링 (update, updateForm, delete) 1. try/catch를 이용한 Exception (1)QuestionController 1_ hasPermission update method반복되는 코드를 최소화하기 위해 hasPermission 메소드
2_ hasPermission을 try/catch문에 추가하여 예외처리 구현 -updateForm updateForm method-update update method-delete delete method2. result 객체를 생성해서 작성하기 (1) Result Result
(2)QuestionController 1_valid valid method
2_updateForm, update, delete
-updateForm updateForm method-update update method-delete delete method* 예외 처리1. 예외란 - 예외 : 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류 2. 예외 처리기 (try-catch, throws)
3. 예외의 종류 1) Error - 자바 가상 기계 안에서 치명적인 오류 발생 - H/W 문제 등으로 파일을 읽을 수 없는 경우 - 컴파일러가 체크하지 않음! 2) RuntimeException - 프로그래밍 버그나 논리 오류에 기인한다 - 컴파일러가 체크하지 않음! 3) 기타 예외 - 회복할 수 있는 예외로 반드시 처리해야 함 - 컴파일러가 체크함! 1. 리팩토링1) 에러 코드를 예외로 치환 : 에러 발생 사실을 에러 코드로 표현 2) 리팩토링 카탈로그
2. 예제 프로그램
1) 리팩토링 전
2) 리팩토링 실행 ① 에러 종류에 맞는 적절한 예외 작성 ⑴ 예외 상태가 아니라면 예외를 사용하지 않음 ⑵ 복구 가능한 에러라면 검사 예외 선택 ⑶ 복구 불가능한 에러 또는 프로그래머 실수로 인한 에러라면 비검사 예외 선택 ⑷ 컴파일 ② 메서드를 호출하는 쪽 변경(검사 예외) ⑴ 호출하는 쪽에서 에러를 처리한다면 try~catch 추가 ⑵ 호출하는 쪽에서 에러를 처리하지 않는다면 throws 절 추가 ⑶ 컴파일해서 테스트 ③ 메서드를 호출하는 쪽 변경(비검사 예외) * 검사 예외와 비검사 예외 3) 리팩토링 후
3. 코드 추가 수정1) 분류 코드를 상태/전략 패턴으로 치환 - if문의 연쇄는 switch문과 마찬가지로 악취를 풍긴다 - 따라서 forward, backward, turn_right, turn_left는 상태/전략 패턴으로 리팩토링한다.
4. 한 걸음 더 나아가기1) 검사 예외와 비검사 예외 - 검사 예외는 보통 java.lang.Exception의 하위 클래스로 선언 해당 구문을 try-catch문으로 감싸거나 throws 절을 붙인다. - 비검사 예외는 java.lang.RuntimeException의 하위 클래스로 선언한다. 2) 예외 계층 - 세세한 에러 처리를 하고 싶으면 계층 아래쪽에 있는 클래스를 예외로 잡는다. - 여러 에러를 한꺼번에 처리하고 싶다면 계층 위쪽에 있는 클래스로 예외를 잡는다. 3) java.io.EOFException에 대해 - 데이터를 읽으려고 했지만 더는 데이터가 없을 때 발생하는 예외! 4) 비검사 예외와 사전 확인용 메서드 - 비검사 예외는 사전 확인으로 예외 발생을 회피 가능한 상황에 사용하는게 좋다. 5) 실패 원자성 - 예외를 던질 때 객체가 이도저도 아닌 상태에 빠지지 않게 하라 |