본문 바로가기
Lecture Notes/Readable Code

[Clean Code] 논리, 사고의 흐름

by newtownboy 2024. 12. 24.

논리, 사고의 흐름

공백 라인을 대하는 자세

공백 라인은 단순히 비어있는 공간이 아니라 코드의 "의미 단위"를 구분 짓는 중요한 역할을 수행한다. 복잡한 로직을 처리하는 코드에서 공백 라인을 적절하게 활용하면, 각 로직의 흐름을 시각적으로 분리하고 읽는 사람이 이해하기 쉽게 도와준다.


부정어를 대하는 자세

부정어는 코드에서 가독성을 떨어뜨릴 수 있다. 예를들어, !isEmpty() 또는 !isValid()와 같은 부정 연산자는 직관적으로 읽기 어려운 경우가 많다. 따라서 코드를 작성할 때 부정어구를 쓰지 않아도 되는 상황인지 체크해야 한다.

 

부정의 의미를 담은 다른 단어가 존재하는지 고민하자! 위에서 예를 들었던 !isEmpty()는 isNotEmpty()로 변경할 수 있다.


해피 케이스와 예외 처리

예외 처리는 코드의 품질을 결정하는 중요한 부분을 차지한다. 예외는 주로 사용자 입력, 객체의 생성자, 외부 서버의 요청 등 외부 세계(해당 객체 또는 메서드를 사용하는 주체)에 의해 발생한다.

 

따라서, 개발을 할 때는 의도한 예외와 예상하지 못한 예외를 구분해야 한다. 예를 들어, 사용자가 잘못된 데이터를 입력할 때 발생하는 예외는 "의도된 예외"이고, 시스템이 예기치 않게 다운되는 것은 "예상치 못한 예외"이다.

 

의도된 예외는 사용자에게 메세지(ex. "잘못된 입력입니다.")를 통해 알려주고 예상치 못한 예외의 경우 별도의 로그로 기록하여 더 이상 오류가 발생하지 않도록 하는 것이 중요하다.

 

Null을 대하는 자세

NullPointException은 개발을 진행하며 가장 빈번하고 흔하게 발생하는 오류로 이를 방지하기 위한 코드를 작성하는 것이 중요하다.

 

메서드 설계 시 가능한 null을 반환하지 않도록 설계하는 것이 중요하다. 어쩔 수 없이 null을 반환해야 한다면 Optional을 사용해 보자! Optional을 사용하면 null 대신 값이 없음을 명시적으로 처리할 수 있다.

 

Optional은 비싼 객체이므로 꼭 필요한 상황에서만 사용해야 한다. Optional로 값을 반환 받았다면 최대한 빠르게 해소한다. 해소하는 방법은 아래에 설명 (Optional은 파라미터로 사용하지 않음)

 

Optional을 해소하는 방법

Optional을 사용하는 경우 최대한 빠르게 값을 처리하는 것이 중요하다. isPresent()나 get()을 사용해 값을 추출하는 대신, 다음과 같은 API를 사용하는 것이 좋다.

  • orElse(): 값이 없을 경우 기본 값을 반환
  • orElseGet(): 값이 없을 경우 제공된 Supplier에 의해 기본 값을 반환
  • orElseThrow(): 값이 없을 경우 예외를 던짐
  • ifPresent(): 값이 있을 경우 실행
  • ifPresentOrElse(): 값이 있을 경우 실행하고, 없을 경우 다른 처리를 실행