DAY06

  • 오늘 읽은 범위 : 함수 ~p50 함수인수 부제목까지

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

  • 함수가 하나 있다. 너무 긴가? 추상화 수준도 다양한가? 몇곂으로 중첩된 if문이 이상한 플래그를 확인하고 이상한 문자열을 사용하며 이상한 함수를 호출하는가?1
    • 그렇다면 메서드를 추출해나고, 이름 몇개를 변경하고, 구조를 조금 변경해보라!2
  • 작게 만들어라! -첫째도 작게! 둘째도 작게!
    • 가로 150줄을 넘어가면 안된다! 세로 100줄은 길다! 아니? 20줄도 길다!
    • Sparkle 이야기
      • 켄트 벡의 자바/스윙 프로그램이다
      • 모든 함수가 2~4줄 사이였다
      • 각 함수가 명백했다
      • 이것이 바로 답이다!3
    • if/else문 루프안에 들어가는 블록은 한줄로만! -바깥을 감싸는 함수가 작아진다
    • 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다! -그래야 함수가 읽고 이해하기 쉬워진다
  • 한 가지만 해라!
    • 함수는 한가지를 해야 한다. 그 한가지를 잘해야 한다. 그 한가지만을 해야 한다
    • 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.4
    • 함수가 한가지 이상을 하는지 판단하는 방법: 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 작업은 여러 작업을 하는 셈이다.
  • 함수당 추상화 수준은 하나로!
    • 함수가 한가지 일만 하기 위해서는 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
    • 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈리게 된다.
    • 위에서 아래로 코드 읽기: 내려가기 규칙5
      • 이야기가 읽히듯 함수를 따라 내려가며 추상화단계를 낮추는 방법
    • 추상화 수준이 하나인 함수를 구현하는 데의 핵심: 짧으면서도 '한가지'만 하는 함수!
  • Switch 문
    • switch문은 작게 만들기 힘들다!
    • 다형적 객체를 생성하는 코드 안에서만 꽁꽁 숨겨서 사용하자! -그렇다고 모든 상황에서 이렇게만 쓰일 수는 없다
  • 서술적인 이름을 사용하라
    • 함수의 좋은이름: 함수가 하는 일을 잘 표현하는 이름
    • "코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라고 불러도 되겠다" -워드 커닝햄6
    • 길어도 짧은 이름보다 -길고 서술적인 주석보다-서술적이라면 긴 이름이 좋다
    • 모듈 내에서 함수이름은 같은 문구, 명사, 동사를 사용하라!
      • 이야기를 풀어나가기 쉬워진다!

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

  1. 앞의 챕터에서는 이름을 짓는 방법, 이번 챕터에서는 코드의 이야기를 풀어나가는 방법을 배우는 것 같습니다. 일을 하며 매우 많은 시간동안 코딩을 해왔고 나름대로 코딩을 좀 할 줄 안다고 생각했지만, 뒤돌아보면 몇백줄이 넘는 함수도 작성했으며, 그 함수를 유지보수하느라 보낸 시간이 굉장히 길었던 것 같습니다. 이 장에서는 왜 그런 현상이 일어났는지, 내 코드는 왜 유지보수가 쉽지 않았는지 알려주었으며, 앞으로 함수를 지을때에는 어떻게 하면 이해하기 쉽게, 유지보수하기 쉽게, 변경하기 쉽게 만드는지 잘 배웠습니다.

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

  • -

세줄 요약

  • 함수는 최대한 짧게 유지해라!
  • 코드의 추상화 수준을 파악하여 한 함수당 한가지의 일을 '잘'하도록 만들어라!
  • 코드는 이야기다! 독자가 읽어가면서 파악할 수 있는 함수들로 이뤄진 코드를 짜라!

주석

  1. p40의 목록 3-1 코드 참조 

  2. p42의 목록3-2 코드 참조 

  3. p43의 목록3-3 코드 참조 

  4. p45 TO 문단 참조 

  5. p46 내려가기 규칙 참조 

  6. 컴퓨터 프로그래머이며 위키의 개념을 만든 사람 위키피디아