Community

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

← Go back
TIL 3장. 함수
#clean_code
2년 전
555


TIL (Today I Learned)

2022.02.22

오늘 읽은 범위

3장. 함수

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

  • 작게 만들어라
    함수에서 들어쓰기 수준은 1단이나 2단을 넘어서면 안된다

  • 한 가지만 해라
    단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다

  • 함수 당 추상화 수준은 하나로!
    함수가 한가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야한다
    함수 내 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다

  • 내려가기 규칙
    코드는 위에서 아래로 이야기처럼 읽혀야 좋다

  • Switch문
    switch문을 추상 팩토리에 꽁꽁 숨긴다

  • 서술적인 이름을 사용하라!
    이름이 길어도 괜찮다. 겁먹을 필요없다


    길고 서술적인 이름이 짧고 어려운 이름보다 좋다.


    길고 서술적인 이름이 길고 서술적인 주석보다 좋다.


    모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다.

  • 함수 인수


    함수에서 이상적인 인수 개수는 0개(무항)다.
    다음은 1개(단항)고
    다음은 2개(이항)다.


    3개(삼항)는 가능한 피하는 편이 좋다.
    4개 이상(다항)은 특별한 이유가 필요하다.
    특별한 이유가 있어도 사용하면 안된다.

  • 플래그 인수


    플래그 인수는 추하다.


    함수가 한꺼번에 여러가지를 처리한다고 대놓고 공표하는 셈이니까

  • 동사와 키워드


    단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다.

  • 부수 효과를 일으키지 마라
    시간적인 결합이 필요하다면 함수 이름에 분명히 명시한다.

  • 출력 인수
    일반적으로 출력 인수는 피해야한다.
    함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다.

  • 명령과 조회를 분리하라


    명령과 조회를 분리해 혼란을 애초에 뿌리뽑는다.

  • 오류 코드보다 예외를 사용하라
    오류 코드를 반환하면 호출자는 오류 코드를 곧바로 처리해야 한다는 문제에 부딪힌다.


    예외를 사용하면 오류처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.

  • 오류 코드도 한가지 작업이다
    함수에 키워드 try가 있다면 함수는 try로 시작해 catch/finally문으로 끝나야 한다.

  • Error.java 의존성 자석


    오류 코드를 반환한다는 이야기는, 클래스든 열거형 변수든, 어디선가 오류코드를 정의한다는 뜻이다.
    예외를 사용하면 새 예외는 Exception 클래스에서 파생되므로 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다.

  • 반복하지 마라
    include 방법으로 중복을 없앨 수 있다.

  • 구조적 프로그래밍(모든 함수와 함수 내 모든 블록에 입구와 출구가 하나만 존재해야한다)
    구조적 프로그래밍의 목표와 규율은 공감하지만 함수가 작다면 별 이익을 제공하지 못한다.


    함수가 작다면 break, continue, return을 여려차례 사용해도 괜찮다.


    goto문은 큰 함수에서만 의미가 있다.

  • 함수를 어떻게 짜죠?
    처음에 함수를 짤때는 길고 복잡하다. 하지만 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스를 만든다.

  • 결론
    함수는 언어에서 동사며, 클래스는 명사다
    진짜 목표는 시스템이라는 이야기를 풀어가는데 있다.
    작성하는 함수가 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 이야기를 풀어가기가 쉬워진다.

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

  • 이름은 최대한 짧게 하려고 의미를 묵살시킬때가 많고, 대신 주석을 달아놓을 때가 있었는데 반성하게 되었다.

  • 인수를 최대한 줄여야겠다.

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

  • 단위 테스트를 어떻게 하는 것일까 공부를 해야겠다.