Community

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

← Go back
[Clean Code] Assignment #02
#clean_code
2년 전
536


TIL (Today I Learned)

2022.02.23


오늘 읽은 범위

3장. 함수


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

  • 블록과 들여쓰기

    • if 문/else 문/while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다.

    • 바깥을 감싸는 함수(enclosing function가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다.

    • 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다.

  • 함수 당 추상화 수준은 하나로!

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

    • 위에서 아래로 코드 읽기 : 내려가기 규칙

      • 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.
        즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.

  • Switch 문

    • 본질적으로 switch 문은 N가지를 처리한다.

    • 하지만 각 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법은 있다. 물론 다형성(polymorphism)을 이용한다.

  • 서술적인 이름을 사용하라!

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

  • 함수 인수

    • 함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개(단항)고, 다음은 2개(이항)다. 3개(삼항)은 가능한 피하는 편이 좋다. 4개 이상(다항)은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안 된다.

    • 많이 쓰는 단항 형식

      • 함수에 인수 1개를 넘기는 이유로 가장 흔한 경우는 두 가지다.

        1. 인수에 질문을 던지는 경우

        2. 인수를 뭔가로 변환해 결과를 반환하는 경우

        3. 이벤트 함수는 입력 인수만 있다. 출력 인수는 없다.


          프로그램은 함수 호출을 이벤트로 해석해 입력 인수로 시스템 상태를 바꾼다.

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

    • 때로는 예상치 못하게 클래스 변수를 수정한다. 때로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.

    • 많은 경우 시간적인 결합(temporal coupling)이나 순서 종속성(order dependency)를 초래한다.

  • 명령과 조회를 분리하라!

  • 오류 코드보다 예외를 사용하라!

  • 반복하지 마라!

    • 구조적 프로그래밍, AOP(Aspect Oriented Programming), COP(Component Oriented Programming) 모두 어떤 면에서 중복 제거 전략이다.

  • 구조적 프로그래밍

    • 모든 함수와 함 수 내 모든 블록에 입구와 출구가 하나만 존재해야 한다. 즉, 함수는 return 문이 하나여야 한다는 말이다. 루프 안에서 break나 continue를 사용해선 안 되며 goto는 절대로, 절대로 안 된다.


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

  • 단순하게 입력을 받고 출력하는 것만으로 함수로 생각한 내가 한심하다는 생각을 했다. 다형성과 추상화 등 객체 프로그래밍에서 가장 중요하다고 첫 장부터 배우는데 말이다. 개념을 정확히 알고 그 개념을 가지고 프로그래밍을 해야 진정한 프로그래머가 아닌가 하는 생각이 든다. <3장. 함수> 편을 읽고 크게 반성한다. 그리고 깨달았다.


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

  • AOP 에 대해 모르겠다. 구조적 프로그래밍 공부를 다시 해야겠다.