Closed ChoMk closed 4 years ago
미확인 예외를 사용하자. : 확인된 예외는 OCP를 위반한다. 하위 메서드에서 코드를 변경하면 상위 메서드에서도 해당 예외를 정의해야한다.
- [ 확인된 예외(checked exception) ] 잘못된 코드가 아닌 잘못된 상황에서 발생하는 예외파일 열기와 같이 정확한 코드로 구현했음에도, 외부 환경(파일이 없는 상황 등)에 따라 발생 가능예외처리를 구현하지 않으면 컴파일 에러 발생 (컴파일 시 확인해서 확인된 예외) RuntimeException 이외의 예외들
- [ 미확인 예외(unchecked exception) ] 런타임 시 잘못 구현된 코드로 인해 발생하는 예외컴파일 에러가 나지 않지만 적절한 예외처리가 없을 경우 프로그램이 강제 종료컴파일 시 확인하지 않기 때문에 미확인 예외RuntimeException에 포함된 예외들
예외를 대응하는 방식이 예외 유형과 무관하게 동일 하므로 간단히 class로 감싸 줌으로서 코드를 간결하게 고칠 수 있다. 외부 API를 감쌈으로서 의존성을 크게 줄여 이후 다른 라이브러리로의 전환 비용도 적다.
try { A } catch { a } A가 안 될 때 비슷한 동작 혹은 기본 값을 이용해 A에서 못 한일을 대체 하는 a라는 로직은 논리를 따라가기 어렵게 만든다. 대신 A가 안되면 a를 하는 함수를 만들어 try/catch를 제거하자.
null을 반환하지 마라...........(가능한 일인가.................ㅜ)
읽기 좋은 것과 안정성이 높은 것은 상충하는 목표가 아니다. 오류 처리를 프로그램 논리와 분리해 독자적으로 고려하면 안정적이고 유지보수성이 높아진다.
외부 인터페이스를 사용 할 때 향후 인터페이스 업데이트 시 수정할 코드가 많아 질 수 있으며 오용할 여지가 있다. 이 때 클래스 안으로 숨겨 유지보수와 사용이 용이하게 할 수 있다. 외부 인터페이스를 사용할 때 마다 캡슐화를 하란 것이 아니라 이를 이용하는 클래스나 클래스 계열 밖으로 노출 되지 않도록 한다.
외부코드를 익히고 통합시키는 것은 어렵다. 먼저 우리 코드를 작성하고 외부코드를 호출하기 전 간단한 테스트 케이스를 통해 외부 코드를 먼저 익히는 것을 학습 테스트라고 한다.
학습 테스트를 통해 API 를 사용하는 방법을 익히고 독자 적인 클래스로 캡슐화 한 다면 이후 프로그램 작성시에는 해당 API를 몰라도 된다.
새버전이 나온다면 학습 테스트를 돌려 차이를 바로 확인 할 수 있어 새 버전으로 이전하기 쉬워진다.
깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 깨끗하고 튼튼한 코드를 위한 우아하고 고상하게 오류를 처리하는 기법을 소개
Assert
문 사용Assertion
vs Exception
(by. javacan)외부 코드를 우리 코드에 깔끔하게 통합하기 위하여 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 소개
p.151 [WELC] 참고
(p.146) Map 인스턴스를 공개 API의 인수로 넘기거나 반환값으로 사용하지 않는다
에 대한 의견
- 무언가 잘못될 가능 성은 존재한다. 그 잘못됨을 잡을 책임은 프로그래머에게 있다.
- 오류 처리 코드 때문에 실제 코드가 하는 일이 무엇인지 파악하기 어려워지는 일을 막아볼 수 있게 가이드 하는 장
오류 코드보단 예외를 사용하라 (if 덕지 덕지 보다 깔끔)
Try-Catch-Finally 문부터 작성하라
미확인 예외를 사용하라
예외에 의미를 제공하라
호출자를 고려해 예외 클래스를 정의하라
오류를 잡아내는 방법
정상 흐름을 정의하라
null 을 반환하지 마라
null 을 전달하지 마라
C++, C#, python, ruby 는 미확인 예외밖에 없음
출처: https://codevang.tistory.com/140
[ 확인된 예외(checked exception) ]
[ 미확인 예외(unchecked exception) ]
런타임 시 잘못 구현된 코드로 인해 발생하는 예외
컴파일 에러가 나지 않지만 적절한 예외처리가 없을 경우 프로그램이 강제 종료
컴파일 시 확인하지 않기 때문에 미확인 예외
RuntimeException에 포함된 예외들
확인된 예외는 OCP (Open Closed Principle) 을 위반한다
소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살필 예정
학습 테스트
해봐야겠다외부 코드 사용하기
Map
은 누구든 삭제 및 갱신을 할 수 있음학습 테스트
는 공짜 이상이다
학습테스트
: 외부 코드를 사용하기 전, 학습 겸 외부 코드 호출 테스트를 작성아직 존재하지 않는 코드를 사용하기
이번 주 발표자
진도
발표자료