✨깨끗한✨ 함수와 주석

JACKJACK·2022년 12월 23일
1
post-thumbnail

📝클린코드를 위한 마음가짐

"이론과 실전은 다르다."

자전거 타기의 물리적인 지식을 다 익혀도 처음타면 100% 넘어지고, 이는 체득하지 않으면 의미가 없다. 자전거가 몸의 일부처럼 움직이듯 책을 활용하면 좋을것이다.


📄클린코드 3장 - 함수

“모든 프로그램의 기본 단위는 ‘함수’이며 좋은 함수를 만드는 것이 중요하다.”

깨끗한 함수를 만들기위해서는 크게 다섯가지 방법이 있다.

  1. 한가지 추상화 수준을 함수로 만들어라!
  2. 함수는 서술적인 이름을 사용하라!
  3. 함수의 인수를 최대한 줄여라!
  4. 부수 효과를 일으키지 마라!
  5. 반복하지 마라!

🧐한가지 추상화 수준을 함수로 만들어라!

“함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.”

  • 많은 추상화 수준과 중첩 if문을 사용하면 함수의 의도를 파악하기 힘들다. 오른쪽과 같이 함수의 추상화 수준(들여쓰기 수준)을 통일시키면 몇 줄만 읽어도 함수의 의도 파악이 훨씬 쉬우니 습관을 들여야 한다.

  • 함수를 작게 만드는 습관이 클린코드를 만든다고 한다.(저자의 경험)다음은 세가지 액팅을 가지는 하나의 함수를 줄여나가는 과정이다.

  • 명령과 조회는 두가지 액팅이므로 분리해야한다. 한 함수에 두가지 이상의 기능을 수행할 경우 함수를 사용할 때 혼란을 초래한다.


😏함수는 서술적인 이름을 사용하라!

서술적인 이름을 사용해 함수의 의도를 명확하게 하라!

  • 서술적인 이름을 사용해 함수의 의도를 명확히 하면 설계가 뚜렷해지고 이후 코드를 재구성하기도 쉬워진다. testableHtml 보다 html의 시작과 종료를 포함해 렌더링을 수행한다를 한눈에 이해할 수 있게 된다.

  • 모듈 내에서 쓰이는 함수 이름을 일관성 있게 붙인다면 '짐작하는 대로' 다른 함수들이 존재하기 때문에 찾기 쉽다.


😌함수의 인수를 최대한 줄여라!

서술적인 이름을 사용해 함수의 의도를 명확하게 하라!

  • 함수의 이상적인 인수 개수는 0개 이며 3개 이상은 지양하는 편이 좋다. 인수를 사용할 경우 현 시점에서 중요하지 않은 세부사항 new PageContent를 알아야 한다. 또 인수가 많은 함수에서 테스트 코드를 작성한다면 각각 인수의 조합으로 함수를 검증해야 하므로 개발비용이 늘어난다.

  • 플래그 인수를 지양하라. 플래그 인수는 호출하는 쪽에서 실행할 로직을 선택하기 위해 전달하는 인수인데, 로직이 여러개인 함수는 여러가지를 처리하는 함수일 가능성이 높기 때문에 지양해야 한다.

  • 인수를 꼭 써야하는 경우 예)동사/명사 가 쌍을 이루는 형태


😬부수 효과를 일으키지 마라!

Re: 함수는 한가지를 해야한다.

  • 다음 코드를 볼 때 함수 이름은 checkPassword 이지만 세션을 초기화 한다는 Session.initialize()라는 함수를 사용하며 사용자의 암호를 인증과 세션 정보를 초기화 두가지 기능을 수행하게 되고 결함 발생 시 찾기 힘든 상황에 빠진다.
    따라서 Session.initialize() ->checkPasswordAndInitializeSession()라는 함수명을 사용하는 것이 바람직하다. 하지만 이 또한 두가지 기능을 지니기에 위험요소가 존재한다.

😣반복하지 마라!

반복되지 않게 함수를 짜는 것은 가독성에 도움을 준다.

  • SOLID(객체지향 설계)도 중복을 제거하기 위한 노력들이 반영되며 지지를 받아왔다.

  • 알고리즘을 변경할 경우 반복되는 여러 곳을 손봐야하며 에러가 발생된 확률이 늘어난다.


😀3장 종합

“소프트웨어를 짜는 행위는 글짓기와 비슷하다. 프로그래밍은 결국 언어로 더 풍부하고 표현력이 강한 문장을 만들어 이야기를 풀어나가는 행위이다.“ 함수




📄클린코드 4장 - 주석

“나쁜 코드에 주석을 달지 마라. 새로 짜라.”

-브라이언 w.커니핸, p.j.플라우거-


🤔주석을 달지 마라

보통 코드로 의도를 표현하지 못하기 때문에, 실패를 만회하기 위해 주석을 선택한다. 하지만 주석은 나쁜 코드를 보완해주지 않는다.

  • 코드로 의도를 표현하라. 좋은 코드에는 주석이 필요없다.

  • 코드는 변화하고 진화하는데 주석이 이를 언제나 따라갈 수 없으며, 시간이 지날수록 주석이 아예 그릇될 가능성이 높아진다. 부정확한 주석은 아예 없는 것보다 훨씬 나쁘다.


🥴좋은 주석이란?(없다)

좋은 주석은 거의 없다.

  • 법적인 주석

    // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved

  • 정보를 제공하는 주석, 의도를 설명하는 주석, 의미를 명료하게 밝히는 주석

    // 테스트 중인 Responder 인스턴스를 반환한다.
    protected abstract Responder responderlnstance();

  • 결과를 경고하는 주석, 중요성을 강조하는 주석

    // 여유 시간이 충분하지 않다면 실행하지 마십시오.
    public void _testWithReallyBigFile()
    String listItemContent = match.group(3).trim();
    // 여기서 trim은 정말 중요하다. 문자열에 시작 공백이 있으면 다른 문자열로 인식되기 때문이다.

🥴나쁜 주석이란?

대다수의 주석이 다 나쁜 주석에 속한다.

  • 주절거리는 주석,
  • 같은 이야기 반복하는 주석,
  • 오해할 여지가 있는 주석,
  • 의무적으로 다는 주석,
  • 이력을 기록하는 주석과 저자를 표시하는 주석(소스코드 관리 시스템이 없을 경우),
  • 있으나 마나 한 주석,
  • 위치를 표시하는 주석(본인 html코드 한정),
  • 주석으로 처리된 코드(본인 어느정도 시스템에 익숙해졌다면 중요도 확인 및 삭제),
  • 너무 많은 정보,
  • 모호한 관계,
  • 비공개 코드에서 Javadocs

😀4장 종합

“결국 코드로 의도를 표현하는 법이 주석을 다는 것보다 좋다.”




💡결론

- 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.

- 코드로 의도를 표현하는 법이 주석을 다는 것보다 좋다.

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글