Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
Assignment 5 __ 3장 함수
#clean_code
2년 전
741

오늘 TIL 3줄 요약

  • 서술적인 이름을 사용하자

  • 함수의 인수 개수에 주의! (무항, 단항, 이항, 삼항)

  • 함수를 짤 때 처음엔 길고 복잡해도 괜찮다.

TIL (Today I Learned) 날짜

2022-04-26

오늘 읽은 범위

3장. 함수

책에서 기억하고 싶은 내용을 써보세요.

  • 함수를 작게 만드는 첫째 규칙은 '작게!' 다 . 둘째 규칙은 '더 작게!'다.

  • 블록과 들여쓰기

    • if문 / else 문 / while 문 등에 들어가는 블록은 한줄이어야 한다는 의미다. 대게 거기서 함수를 호출한다. 그러면 바깥을 감싸는 함수가 작아질 뿐만 아니라, 블록 안에서 호출 함수 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다.

    • 들여쓰기 수준은 1단이나 2단을 넘어서는 안된다.

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

      • 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야한다.

    • 내려가기 규칙 - 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.

    • Switch 문 - 본질적으로 switch문을 N가지 처리한다. 다형성을 이용해서 저차원 클래스에 숨기고 절대로 반복할 수 있다.

    • 서술적인 이름을 사용하라! - 이름이 길어도 괜찮다. 겁먹을 필요없다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. 이름을 정하느라 시간을 들여도 괜찮다. 서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다.

    • 함수 인수 - 함수에서 이상적인 인수 개수는 0개(무항)다. 다음은 1개(단항)이고, 다음은 2개(이항)다. 3개(삼항)는 가능한 피하는 편이 좋다.

      • 플래그 인수 - 플래그 인수는 추하다. 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈이니까! render(boolean isSuite) 보다 renderForSuite() 와 renderForSingleTest() 라는 함수로 나눠야 마땅하다.

      • 이항 함수 - 인수가 2개인 함수는 인수가 1개인 함수보다 이해하기 어렵다. 이항함수가 적절한 경우도 있어서 무조건 나쁘다는 소리는 아니지만 그만큼 위험이 따른다는 사실을 이해하고 가능하면 단항 함수로 바꾸도록 애써야한다.

      • 삼항 함수 - 인수가 3개인 함수는 인수가 2개인 함수보다 훨씬 더 이해하기 어렵다. 순서, 주춤, 무시로 야기되는 문제가 두배 이상 늘어난다.

    • 명령과 조회를 분리하라! - 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다. 둘다하면 안된다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다. 둘다 하면 혼란을 초래한다.

    • 오류코드보다 예외를 사용하라! - 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 미묘하게 위반한다. 자칫하면 IF문에서 명령을 표현식으로 사용하기 쉬운 탓이다. 오류코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.

    • Try/Catch 블록 뽑아내기. - Try/Catch 블록은 원래 추하다. 코드 구조에 혼란을 일으키며 정상 동작을 뒤섞는다. 그러므로 try/catch 블록을 별도 함수로 뽑아내는 편이 좋다.

  • 함수를 짤 때 처음에는 길고 복잡하다. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 그런 다음 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 함수 작성 방법에 대해서 '이렇게 하지말라' 라는 식이 아니라 방안도 함께 알려줘서 이해가 더 수월했다. 주니어 개발자가 읽기에 좋은 책이라는 생각이 다시 한 번 더 들었다.

  • 특히, bool값 인수로 갖는 플래그 인수나 이항함수, 삼항함수를 사용하면 좋지 않다.

  • 책을 읽으며 이 모든 걸 생각하면서 개발을 할 수 있을까? 라는 생각을 했는데 글쓴이 조차도 처음에는 길고 복잡한 코드를 짠 뒤, 그 다음 코드를 예쁘게 정리하는 습관을 가지고 있다고 알려주어 고민을 덜어 놓을 수 있었다. 일단 동작하도록 코드를 짜고, 예쁘게 정리해서 다른 사람이 읽기 쉽게 짜는 것도 방법이라는 생각이 들었다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • p.53 삼항 함수에서 assertEqualse(message, expected, actual)이라는 함수에서 첫 인수가 expected라고 예상하지 않았는가? 이 부분에서 왜 expected가 첫 인수로 예상되는지를 모르겠다. assert(테스트)를 몰라서.. 모르는걸까?