클린코드 3장
#개발서적

클린코드 3장

주제

  • 클린코드 3장 정리

 


3장 "함수" 요약

함수를 잘 만드는법

# 메모

어떤 프로그램이든 가장 기본적인 단위는 함수이다.

 

★ 함수는 무조건 작게 만들어라

 

if/else, whilel 문 등에 들어가는 코드는 한 줄이어야 함

인덴트는 1단 혹은 2단을 넘어가지 않는다. (중첩 구조 발생)

함수는 한 가지 기능만 수행해야 한다.

 

한 가지 기능은 여러 단계에 걸쳐 수행될 수 있다.

지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것

애초에 함수를 만드는 이유는 큰 개념(함수 이름을) 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위함

함수가 한 가지만 하는지 판단하는 방법 : 단순히 다른 표현이 아니라 의미 있는 다른 함수를 추출할 수 있다면 여러 작업을 하는셈

 

함수의 추상화 수준은 하나로

한 함수 내에 모든 문장의 추상화 수준은 동일해야 함

 

코드는 위에서 아래로 내려가며 읽혀야 한다. (위아래 반복하며 읽어야 하고 이러면 안좋음)

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

 

switch 문

다형성을 통해 OCP를 해하지 않고 해결할 수 있다.

팩토리에서 생산한 서브 클래스이 Override하여 각자 다른 기능을 수행하도록 

 

함수는 서술적인 이름을 사용하라

서술적으로 기술하면 함수가 하는 일을 잘 표현할 수 있다.

코드를 읽으며 짐작한 기능을 각 루틴이 그대로 수행하면 깨끗한 코드 ★

 

함수 인수는 3개 이상은 피하는 편이 좋다

인수가 많을 수록 의미 해석이 어렵고, 테스트하기도 어렵다. (여러 경우가 존재)

 

플래그 인수는 .. 사용하지 마라 (void calculate(boolean isSomething)

플래그 값에 따라 함수가 여러 가지 기능을 한다는 거니까 애초에 사용하지 말 것

render(boolean isSuite)가 아닌 renderForSuite(), renderForSingleTest() 가 낫다.

 

인수가 2개인 함수

좌표 값 등을 제외. assertEquals(expected, actual) 만 봐도, 앞 인수가 expected고 뒤 인수가 actual인걸 기억해야 함

불가피한 상황이 있을 수 있지만 주의해야 함

 

인수가 3개인 함수

인수로 인해 발생하는 문제가 두 배 이상 늘어남

 

가변인수

가변인수도 까놓고 보면 단항 ~ 삼항까지만 감

 

부수 효과를 일으키지 마라

함수에서 예측하지 못한 일을 내부적으로 수행하면 안된다.

함수로 넘어온 값으로 시스템 전역 변수를 수정.. 

함수 이름에 없는 중요한 일을 하지말라

 

출력 인수

일반적으로 피해야 하고 사용하지 않음

 

오류 코드를 반환하지 말고 예외를 사용하라

오류 코드를 반환하면 호출자가 처리해야 함 (여러 단계 중첩을 야기함)

 

try/catch 블록 뽑아내기

try 내부에서 하는 일을 별도로 분리하라. 마찬가지로 catch가 해야 하는 일을 별도로 분리하라

 

오류 코드는 웬만하면 사용하지 마라

하나의 파일에서 오류 코드를 정의하고, 새로운 오류 코드 정의하려면 클래스를 컴파일하고 배포해야 함

Exception을 파생시켜 새 예외를 사용하라

 

반복하지 마라

코드가 반복되면 한 곳이 변할 경우 다른 곳도 변경해줘야 한다

 

구조적 프로그래밍

함수가 작다면 return, break, continue 를 사용하면 표현하기 쉬워진다.

goto는 함수가 클 때만 의미 있을 수 있다.

 

길이가 짧고, 이름이 좋고, 체계가 잡힌 함수.

진짜 목표는 시스템을 풀어나가야 함

 

 

# 요약

함수는 작게 만들고, 하나의 기능을 수행해야 한다. (지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행)

이름에 맞게만 기능을 수행하라.

인수 적절하게 쓰기

위에서 아래로 읽히도록 작성하라

반복하지마라

예기치 못한 일은 수행하지 마라

 

 

 

 

728x90

'#개발서적' 카테고리의 다른 글

클린코드 9장  (0) 2023.08.01
클린코드 6~8장  (0) 2023.06.14
클린코드 4~5장  (0) 2023.06.06
클린코드 1장 ~ 2장  (0) 2023.06.06
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 정리  (0) 2021.05.26