[노개북] 클린코드 Day 04-05

chch·2024년 1월 30일
0

[노개북] 클린코드

목록 보기
4/10

TIL (2024.01.29-30)

📖 오늘 읽은 범위: 3장. 함수

✍️ 책에서 기억하고 싶은 내용

함수를 만드는 규칙

  • 작게 만들어라!
    • if문/else문/while문 등에 들어가는 블록은 한 줄이어야 한다. 중첩 구조가 생기지 않도록 하고, 함수에서 들여쓰기 수준이 1~2단 정도가 되도록 한다.
  • 한 가지만 해라!
    • 그렇다면 '한 가지' 일은 어떻게 정의할까?
      • 바로 추상화 수준으로 본다. 지정된 함수 이름 아래에서 추상화 수준이 하나이면 한 가지 일을 하는 것이다.
      • 또는 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 것이다.
  • 함수 당 추상화 수준은 하나로!
    • 한 함수 내에 다양한 추상화 수준이 존재하면 코드를 읽는 사람이 헷갈린다.
    • 위에서 아래로 이야기처럼 읽히도록, 각 함수는 다음 함수를 소개하고 각 함수는 일정한 추상화 수준을 유지한다.
  • switch문은 다형성을 이용해 추상 팩토리에 숨긴다.
  • 서술적인 이름을 사용하라!
  • 함수의 인수 개수는 적을수록 좋다.
  • 부수 효과를 일으키지 마라!
  • 명령과 조회를 분리하라!
    • 객체 상태를 변경하거나, 객체 정보를 반환하거나.
  • 오류 코드보다 예외를 사용하라!
    • 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 미묘하게 위반한다.
      ex) if (deletePage(page) == E_OK)
    • 오류 코드 대신 예외(try/catch)를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.
    • 그러나 try/catch 블록 또한 정상 동작과 오류 처리 동작을 뒤섞기 때문에 별도 함수로(by throws) 뽑아내는 것이 좋다.
  • 중복을 피하라!
    • 중복 코드를 제거한다는 것은 하나의 함수/모듈/클래스를 사용하여 이 여러 가지 사소한 차이점을 처리 할 수 있는 추상화를 만드는 것을 의미한다.
  • 명령형 프로그래밍보다 함수형 프로그래밍을 지향하라.
  • 프로그래밍의 기술은 언제나 언어 설계의 기술이다.

💭 오늘 읽은 소감과 떠오르는 생각

  • 어렵다..😱 특히 자바는 쓴 지 오래돼서 더더욱. 1, 2장에 비해 난이도가 급상승한 느낌이다.
  • 실제로 적용해보지 않으면 절대 제대로 이해하지 못할 것 같다는 생각이 들었다. 지금 듣고 있는 강의가 하나 있는데, 이 책에서 말하는 함수를 만드는 규칙에 위배되는 코드가 꽤 많아보여서 다 들은 후 혼자 리팩토링을 해볼 생각이다.
  • 책에서는 익히 알고 있던 goto문보다 switch문이나 플래그 인수, 오류 코드 등 더 쓰지 말라는게 많아서 의아하기도 했다. '함수는 한 가지 일만 해야 한다.'는 원칙에는 맞는 것 같지만, 그동안 편하게 써오던 것들이라 이제 쓸 때마다 한번씩은 더 고민하고 써야겠다.
  • 소프트웨어를 짜는 행위는 글쓰기와 비슷하다고 한다. 저자 또한 처음에 무작정 짜고, 테스트 케이스를 만들고, 리팩토링하며 점차 나은 구조를 만들어나간다고 한다. 돌아가기만 하면 된다는 생각으로 짰던 코드들이 스쳐지나간다..😅 보기 아주 힘들겠지만.. 내 코드를 다시 보는 습관을 들여야겠다.

🤨 궁금한 내용 또는 잘 이해되지 않는 내용

  • 다형성과 추상 팩토리에 대해 개념은 알고 있는 것 같은데, 막상 코드를 보니 내가 이렇게 짤 수 있을까 싶었다. 스프링을 공부하기 전에 자바를 다시 복습해야겠다.
  • 꽤 오래 전에 쓰여서 그런지, 비판받는 내용도 있다고 들었는데 어떤 부분에서 논란의 여지가 있는지 궁금하다. 그렇지만 아직 경험이 적기에, 이 책의 내용을 잘 흡수하는 것이 먼저겠다는 생각이 든다. 잘 익혀서 써보고, 다른 사람들의 코드도 많이 보고, 프로젝트 경험이 더 풍부하게 쌓이면 더 좋은 코드가 무엇인지 구분할 수 있는 눈이 생기리라 생각한다.

0개의 댓글