개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
에러 처리도 결국 코드이며, 코드는 곧 부채이다. 부채는 잘 관리해야한다.
이펙티브 자바에서 읽던 내용과 유사한 부분 혹은 조금 뉘앙스가 다른 부분들이 있다. 잘 체크해보고 좋은 것들만 뽑아서 쓰자
이번 TIL에는 생각보다 잘 모르는 용어들이 있었다. 잘 정리해서 체화하자
TIL (Today I Learned) 날짜
2022.05.05
오늘 읽은 범위
7장. 오류 처리
책에서 기억하고 싶은 내용을 써보세요.
오류 처리는 중요하다. 하지만 오류 처리 코드로 인해 프로그램이 어려워진다면 좋은 방법이 아니다
확인된 예외는 OCP를 위반한다.
오류를 정의 할 때 가장 중요한 관심사는 오류를 잡아내는 방법이 되어야한다.
Wrapper 클래스를 잘 이용하면 외부 의존성과 내부 코드를 적절히 분리할 수 있고, 외부 라이브러리를 다 가져올 필요 없이 필요한 부분들만 가져와서 쓸 수 있다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
이번 챕터는 에러 처리 관련해서 "이펙티브 자바"에서 비슷한 내용들을 읽고 있기도 하고, 알면 좋은 개념들이 있어서 추가로 정리하면 좋겠다고 생각됐다. (자바 기준)
130P. 오류 코드보다는 예외를 사용하라. 133P. 미확인 예외를 사용하라
예외도 사실 크게 2가지로 나눌 수 있다.
검사 예외 , 런타임 예외 (비검사 throwable. 에러도 비검사 throwable에 속한다)
"(이펙티브 자바) 아이템 70. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라", "아이템 71. 필요 없는 검사 예외 사용은 피하라" 를 참고하자!
클린 코드 책보다 에러에 대한 더 자세한 설명과 인사이트를 얻을 수 있을지도..?
133P 2번째 예시 코드.
try-catch를 이용하고 try에서 close를 하는데 사실 close()는 까먹기도 쉽고 자원이 많을수록 close가 많아져서 사실상 관리하기가 어렵다.
"(이펙티브 자바) 아이템 9. try-finally보다는 try-with-resources를 사용하라" 를 읽어보자.
135P 예외에 의미를 제공하라
"이펙티브 자바 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라"
두 책 모두 언급할만큼 중요한 내용이다. 명심해두자
135P. 호출자를 고려해 예외 클래스를 정의하라
이펙티브 자바에서도 본 것 같은데 어디인지 모르겠음.
wrapper 클래스는 의부 의존성과 내부의 코드에 벽을 만들어 캡슐화에 용이하다. 또한 외부 의존성에서 필요한 API만 받도록 할 수 있고, 필요해서 가져온 API들에 대해서만 적절한 단위테스트를 구현하면 버전 업데이트를 할 때도 편하고 안전하게 할 수 있다.
137P. 정상 흐름을 정의하라
"아이템 69. 예외는 진짜 예외 상황에만 사용하라"
에러를 이용해서 무엇인가 새로운 flow로 흐르게 하는 행위는 적절하지 못하다.
JVM 개발자들이 에러를 이용해서 이런 flow로 흐를 수 있도록 설계하지 않았다. 진짜 에러를 나타내기 위해서만 설계했기 때문에 빠르지 못하다.
조금 더 고민해서 더 좋은 코드를 작성하자
138P. null을 반환하지 마라.
"
아이템 54. null이 아닌 빈 컬렉션이나 배열을 반환하라"
"아이템 55. 옵셔널 반환은 신중히 하라"
특수 사례 객체에 해당하는 java의 Optional을 고려하자
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
@Test(expected = StorageException.class)
는 Junit4 문법. 처음 보는 방식이라 이런 방식도 있구나 생각했는데, 5가 아닌 4 문법.
Open Closed Principle (OCP)
객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로.
보여줄 수 있는 것은 보여주고 숨길 것은 숨긴다. 각 객체의 모듈화와 정보 은닉의 올바른 구현을 표현
코드의 변경 없이 기능이 확장 가능하도록 구현하자.
비슷한 분기가 반복된다면 개방-폐쇄 원칙을 준수하지 않았을 가능성이 높다.
참고한 주소 : https://blog.itcode.dev/posts/2021/08/14/open-closed-principle.html
Special Case Pattern특수 사례 패턴
JS의 NaN 같은 데이터들이 포함
참고한 자료 : https://dsmoon.tistory.com/entry/NULL-OBJECT-%ED%8C%A8%ED%84%B4
https://martinfowler.com/eaaCatalog/specialCase.html (어디서든 보이는 파울러 아저씨)
오늘 읽은 다른사람의 TIL