TIL (2024.02.06)
DAY 12~13
Summary
- 오류를 처리하는 기법과 고려사항 몇 가지
- 오류 코드보다 예외를 사용하라
- 미확인 예외를 사용하라
책에서 기억하고 싶은 내용
7장 오류 처리
- 오류 처리?
- 깨끗한 코드와 오류 처리의 연관성?
- 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 거의 불가능하다
오류 코드보다 예외를 사용하라 (p.130)
- 오류가 발생하면 예외를 던지는 편이 낫다
- why? 논리가 오류 처리 코드와 뒤섞이지 않기 때문
Try-Catch-Finally 문부터 작성하라 (p.132)
- 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는 편이 낫다
- why? try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워지기 때문
미확인 예외를 사용하라 (p.133)
- 지금은 안정적인 소프트웨어를 제작하는 요소로 확인된 예외가 반드시 필요하지는 않다는 사실이 분명해졌다
- 확인된 예외는 OCP(Open Closed Principle)를 위반한다
- OCP?
- "소프트웨어 개체(클래스, 모듈, 함수 등)는 확장을 위해 개방적이어야 하며 수정시엔 폐쇄적이어야 합니다." - Bertrand Meyer -
- 기본적으로 사용자가
.js
소스 코드 파일을 열어 수동으로 조작하지 않고도 모듈의 기능을 확장하도록 허용해야한다고 말합니다.
- 출처: clean-code-javascript-ko 레파지토리
- 하위 단계에서 코드를 변경하면 상위 단계 메서드 선언부를 전부 고쳐야 한다는 의미...
예외에 의미를 제공하라 (p.135)
- 오류 메시지에 정보를 담아 예외와 함께 던져라
- 실패한 연산 이름과 실패 유형도 언급하라
- 애플리케이션이
로깅 기능
을 사용한다면 catch 블록에서 오류를 기록하도록 충분한 정보를 넘겨준다
호출자를 고려해 예외 클래스를 정의하라 (p.135)
- 오류를 분류하는 방법?
- 오류가 발생한 위치
- 오류가 발생한 컴포넌트
- 오류 유형
- 오류를 정의할 때 프로그래머에게 가장 중요한 관심사는
오류를 잡아내는 방법
이 되어야 한다
- 외부 API를 사용할 때
감싸기 기법
사용 이유?
- 외부 라이브러리와 프로그램 사이에서 의존성이 크게 줄어듬
- 외부 API를 호출하는 대신 테스트 코드를 넣어주는 방법으로 프로그램을 테스트하기 쉬워짐
- 특정 업체가 API를 설계한 방식에 발목 잡히지 않음
정상 흐름을 정의하라 (p.137)
- 특수 사례 패턴
- 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식
- 소프트웨어 개발에서 발생할 수 있는 특정한 예외나 상황을 처리하는 디자인 패턴
- 사용 이유?
- 클래스나 객체가 예외적인 상황을 캡슐화하여 처리하므로 클라이언트 코드가 예외적인 상황을 처리할 필요가 없어진다
null을 반환하지 마라 (p.138)
- 오류를 유발하는 행위?
- null을 반환하는 습관
일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다...
해결 방법? null을 반환하는 대신 예외
를 던지거나 특수 사례 객체
를 반환
null을 전달하지 마라 (p.140)
- 메서드로 null을 전달하는 방식은 null을 반환하는 방식보다 더 나쁘다
- 해결 방법?
- 새로운 예외 유형을 만들어 던지는 방법
- assert 문을 사용하는 방법
- assert 문? 프로그래밍에서 자주 사용되는 문장 중 하나로, 조건이 참이 아닌 경우 프로그램이 중단되도록 하는 역할을 합니다. 이것은 디버깅 및 코드의 무결성을 보장하는 데 사용됩니다.
결론
- 깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야 한다
- 오류 처리를 프로그램 논리와 분리해 독자적인 사안으로 고려하면 튼튼하고 깨끗한 코드를 작성할 수 있다
모르거나 이름만 들어본 개념들
- OCP
- "소프트웨어 개체(클래스, 모듈, 함수 등)는 확장을 위해 개방적이어야 하며 수정시엔 폐쇄적이어야 합니다." - Bertrand Meyer -
- 특수 사례 패턴
- 소프트웨어 개발에서 발생할 수 있는 특정한 예외나 상황을 처리하는 디자인 패턴
- assert 문
- 프로그래밍에서 자주 사용되는 문장 중 하나로, 조건이 참이 아닌 경우 프로그램이 중단되도록 하는 역할을 합니다
- 유닛 테스트를 위해서 Node.js에서 사용할 수 있는 테스트 모듈로 Assert가 있다
오늘 읽은 소감
메서드의 반환 값으로 종종 null 값을 줄 때가 많았는데 책을 읽으면서 뜨끔했다. 앞으로는 그러지 말아야지. 예외를 던지거나 특수 사례 객체를 반환할 수 있도록 코드를 수정해야겠다.
새로운 지식을 내 것으로 만드는 나만의 공부법을 소개