작게 만들어라
- if 문 / else 문 / while 문 등에 들어가는 블록은 한 줄이어야 한다
- 중첩 구조가 생길만큼 함수가 커져서는 안된다
- 함수에서 들여쓰기는 1~2단을 넘어서지 않는 것이 좋다
한 가지만 해라
- "함수는 한 가지만을, 잘 해야 한다!"
- 우선 작성한 함수가 몇 가지의 일을 하는지 파악해야 한다
- 한 함수의 이름 내에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다
- 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다
함수 당 추상화 수준은 하나로!
- 짧으면서도 한 가지만 하는 함수를 만들자
- 함수를 내려가기 규칙에 따라 작성할 것
- 코드는 위에서 아래로 이야기처럼 읽는 게 좋다 (함수 추상화 수준이 한 단계씩 낮아짐)
Switch 문
- switch 문은 여러 가지의 일을 처리하기 때문에 길어지기 쉽다
-> 다형성을 이용하여 switch 문을 저차원 클래스에 숨기고 반복하지 않는 방법을 사용하자
서술적인 이름을 사용해라
- 예) testableHTML -> setupTeardownIncluder.render
- 이름을 짓는 데 시간이 걸려도 괜찮고, 이름이 길어져도 괜찮다
- 서술적인 이름은 머릿속에 뚜렷한 그림을 그리게 해주기 때문에, 코드의 개선 또한 쉽다
- 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용해야 한다
함수 인수
- 함수에서 이상적인 인수의 개수는 0개(무항)~1개이다.
- 인수가 3개 이상이 되지 않도록 하자
- 1개 이상의 인수를 사용하는 상황
1) 인수에 질문을 던지는 경우
2) 인수를 변환해 결과를 반환하는 경우
부수 효과를 일으키지 마라
- 함수에서 한 가지만 하겠다고 하고 다른 일을 더 하게 하지 말자
- 특히 부수 효과가 숨겨진 경우에는 큰 혼란을 초래할 수 있다
- 일단 출력 인수는 피하되, 함수의 상태를 바꿔야 한다면 함수가 속한 객체의 상태를 변경할 것
명령과 조회를 분리해라
- 함수는 뭔가를 수행하거나 뭔가에 답하는 것 중 하나만 해야 한다
- 명령 함수에서 오류 코드를 반환하면 명령/조회 분리 규칙을 위반할 수 있다
-> 오류 코드보다는 예외를 사용할 것
-> try / catch 블록은 별도의 함수로 분리하자
-> 오류를 처리하는 함수도 한 가지 작업(오류 처리)만 해야 한다 + 중복은 최대한 제거하자
구조적 프로그래밍
- 구조적 프로그래밍 원칙: 모든 함수와 그 안의 모든 블록에 입구와 출구가 하나만 존재해야 한다
-> 함수는 return 문이 하나여야 한다
-> 루프 안에서 break 나 continue 를 사용해서는 안된다
-> goto 는 절대 사용하지 않아야 한다 - 위와 같은 원칙은 함수가 아주 클 때만 유리하다
-> 함수가 작다면 return, break, continue 를 사용해도 된다
-> goto 문은 작은 함수에서는 피하자
함수를 어떻게 짜죠?
- 소프트웨어를 짜는 것은 글짓기와 비슷하다
- 먼저 생각을 기록한 후 점차 다듬어나간다
'ETC > Books' 카테고리의 다른 글
[Digging] 이번주에 발견한 흥미로운 글 모음 (+ 간단 요약) (0) | 2023.04.10 |
---|---|
[서평] Do it! 지옥에서 온 문서관리자 깃&깃허브 입문 (0) | 2022.10.26 |
[Clean Code] 1~4장 내용 정리 + 리뷰 (2) | 2022.09.26 |
[Clean Code] 좋은 주석 vs 나쁜 주석 (0) | 2022.09.25 |
[Clean Code] 좋은 코드란? (1~2장) (0) | 2022.09.22 |