클린코드

03. 함수

jenny330 2022. 1. 30. 20:36

작게 만들어라!

무조건!!! 함수는 작게 만들어야 한다. 

정말 최대한 짧게 만드는 게 가장 좋음. (글에서 든 예시는 5줄)

 

블록과 들여쓰기

if/while문 등에 들어가는 블록은 한줄이어야 함.

중첩 구조가 생겨서는 안된다. 

 

한 가지만 해라!

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

 

함수 내 섹션

함수 내에 섹션이 나뉘는지 확인하기. 나뉘어진다면, 하나만 하는 함수가 아닌 것

 

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

근본 개념과 세부사항을 뒤섞지 않기!! 각 코드의 추상화된 정도를 통일해야 함.

 

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

코드는 위에서 아래로 이야기처럼 읽히는 것!

위에서 아래로 추상화 수준이 한 단계씩 낮아진다. 

 

Switch 문

switch문은 작게 만들기 어렵고, 여러 가지 작업을 하는 것이 일반적

-> 해결책: switch문을 추상 팩토리에 숨긴다!!

불가피한 경우를 제외하고는 웬만하면 사용하지 말기

 

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

길고 서술적인 이름이 차라리 나음. 이름부터 잘 고르기!!

 

함수 인수

가장 좋은 것은 함수의 인수가 0개인것. 인수의 개수를 최대한 줄이자. (차선은 단항)

 

많이 쓰는 단항 형식

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

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

-> 이벤트의 경우 단항 형식이 유용

 

플래그 인수

함수로 부울 값 넘기지 마세요

 

이항 함수

이해하기 어려움

단항 함수를 두번 이용하거나 그런 방식으로 피해주기

어쩔 수 없으면 그냥 쓰기..

 

삼항 함수

어려움

 

인수 객체

인수 2-3개를 하나의 클래스 변수로 선언하는 방법 고려

 

인수 목록

인수 개수가 가변적인 함수가 필요하다면?

가변 인수 전부를 동등하게 취급하기 

예: String.format("%s worked %.2f" hours.", name, hours);

 

동사와 키워드

함수와 인수가 동사/명사 쌍을 이루게 세팅하기

예: writeField(name), assertExpectedEqualsActual(expected, actual)

 

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

함수는 한가지만 하는 게 좋다고 했다!! 몰래 기능 추가 금지. 

부수 효과는 시간적인 결합을 초래, 혼란 불러옴.

 

출력 인수

인수를 보통 입력으로 사용하므로 출력으로 사용되는 인수는 어색함이 느껴진다. 

출력 인수는 NO!

 

명령과 조회를 분리하라! 

뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 안그러면 혼란 초래.

 

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

오류 처리 코드가 원래 코드에서 분리되게끔 하기. 기존 함수의 본문에 들어가게 하지 말고.

 

Try/Catch 블록 뽑아내기

코드 구조에 혼란을 일으키는 놈. 

별도로 뽑아내자. 

 

오류 처리도 한 가지 작업이다. 

하나만 하자. 

 

Error.java 의존성 자석

새 오류 코드 추가하지 말고 기존 오류 코드 재사용하기

 

반복하지 마라!

중복은 모든 소프트웨어의 악의 근원. 

현재 언어의 발전은 어떻게 보면 모두 반복을 줄이려는 노력인 것

 

구조적 프로그래밍

데이크스트라 "모든 함수와 함수 내 모든 블록에는 입구와 출구가 하나만 존재해야 한다!"

루프 안에서 break, continue를 사용하지 말며 goto는 절대로 사용하지 말기

 

함수를 어떻게 짜죠?

우선 생각을 기록하라. 

그 이후에 정리하자. 

다듬고, 이름을 바꾸고, 제거하고...

처음부터 하려고 하지 말기.

 

'클린코드' 카테고리의 다른 글

04. 주석  (0) 2022.02.06
02. 의미 있는 이름  (0) 2022.01.23
01. 깨끗한 코드  (0) 2022.01.23