[클린 코드] TIL(Today I Learned) DAY 12~13

soleil_lucy·2024년 2월 6일
0

TIL (2024.02.06)

DAY 12~13

  • 오늘 읽은 범위: 7장 오류 처리

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)

  • 오류를 분류하는 방법?
    1. 오류가 발생한 위치
    2. 오류가 발생한 컴포넌트
    3. 오류 유형
  • 오류를 정의할 때 프로그래머에게 가장 중요한 관심사는 오류를 잡아내는 방법이 되어야 한다
  • 외부 API를 사용할 때 감싸기 기법 사용 이유?
    • 외부 라이브러리와 프로그램 사이에서 의존성이 크게 줄어듬
    • 외부 API를 호출하는 대신 테스트 코드를 넣어주는 방법으로 프로그램을 테스트하기 쉬워짐
    • 특정 업체가 API를 설계한 방식에 발목 잡히지 않음

정상 흐름을 정의하라 (p.137)

  • 특수 사례 패턴
    • 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식
    • 소프트웨어 개발에서 발생할 수 있는 특정한 예외나 상황을 처리하는 디자인 패턴
    • 사용 이유?
      • 클래스나 객체가 예외적인 상황을 캡슐화하여 처리하므로 클라이언트 코드가 예외적인 상황을 처리할 필요가 없어진다

null을 반환하지 마라 (p.138)

  • 오류를 유발하는 행위?
    1. null을 반환하는 습관
      일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다...
      해결 방법? null을 반환하는 대신 예외를 던지거나 특수 사례 객체를 반환

null을 전달하지 마라 (p.140)

  • 메서드로 null을 전달하는 방식은 null을 반환하는 방식보다 더 나쁘다
  • 해결 방법?
    • 새로운 예외 유형을 만들어 던지는 방법
    • assert 문을 사용하는 방법
      • assert 문? 프로그래밍에서 자주 사용되는 문장 중 하나로, 조건이 참이 아닌 경우 프로그램이 중단되도록 하는 역할을 합니다. 이것은 디버깅 및 코드의 무결성을 보장하는 데 사용됩니다.

결론

  • 깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야 한다
  • 오류 처리를 프로그램 논리와 분리해 독자적인 사안으로 고려하면 튼튼하고 깨끗한 코드를 작성할 수 있다

모르거나 이름만 들어본 개념들

  • OCP
    • "소프트웨어 개체(클래스, 모듈, 함수 등)는 확장을 위해 개방적이어야 하며 수정시엔 폐쇄적이어야 합니다." - Bertrand Meyer -
  • 특수 사례 패턴
    • 소프트웨어 개발에서 발생할 수 있는 특정한 예외나 상황을 처리하는 디자인 패턴
  • assert 문
    • 프로그래밍에서 자주 사용되는 문장 중 하나로, 조건이 참이 아닌 경우 프로그램이 중단되도록 하는 역할을 합니다
    • 유닛 테스트를 위해서 Node.js에서 사용할 수 있는 테스트 모듈로 Assert가 있다

오늘 읽은 소감

메서드의 반환 값으로 종종 null 값을 줄 때가 많았는데 책을 읽으면서 뜨끔했다. 앞으로는 그러지 말아야지. 예외를 던지거나 특수 사례 객체를 반환할 수 있도록 코드를 수정해야겠다.

새로운 지식을 내 것으로 만드는 나만의 공부법을 소개

profile
여행과 책을 좋아하는 개발자입니다.

0개의 댓글