CleanCode

[CleanCode] 함수

zamezzz 2023. 10. 12. 22:51

CleanCode - 함수

책에서 함수를 만들때 강조하는 몇 가지가 있는데, 그 중에 중요하다고 느낀 것들 4가지를 정리해보겠습니다.

 

 

1. 작게 만들어라!

함수를 만드는 첫째 규칙은 '작게 만들어라'

함수를 만드는 둘째 규칙은 '더 작게 만들어라'

함수가 작을수록 좋다는 근거 자료는 제시하기 어렵지만, 책에서는 필자가 경험한 40년 이상의 내용을 바탕으로 무조건 작은 함수가 좋다고 확신한다고 합니다.

 

엄청 큰 함수보다 작은 함수가 코드의 유지보수 측면에서 이해하기 편하기 때문에, 같은 동작을 한다면 작은 함수가 더 좋다는 말은 어느정도 맞는 말이라고 생각합니다.

 

2. 한 가지만 해라!

함수는 한 가지를 해야하고, 그  한가지를 잘 해야 한다고 합니다.

책의 예시처럼 하나의 함수가 한 가지를 하는지 세 가지를 하는지, 정확히 알기 어려우면 안된다고 합니다.

함수 내에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 합니다. 

그러므로 함수 내 모든 문장의 추상화 수준이 하나로 동일해야 한다.

 

3. 서술적인 이름을 사용해라!

책의 예제와 같이 함수이름 setTableHtml을 setupTeardownIncluder로 변경한 것은 함수가 하는 일을 좀 더 잘 표현한 사례입니다.

 

안좋게 느껴질수도 있지만, 함수의 이름이 길고 서술적인 것이 짧고 함축적인 것 보다 훨씬 좋습니다.

 

함수이름을 정할 때는 여러 단어가 쉽게 읽히는 명명법을 사용하고, 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택해야 합니다.


4. 오류코드보다 예외를 사용하라!
아래 코드는 여러 단계로 중첩되는 코드를 야기합니다.

 

그리고 오류 코드를 반환하면 호출자는 오류 코드를 곧바로 처리해야하는 문제에 부딪힙니다.

if (deletePage(page) == E_OK) {
	// OK case
	if (registry.deleteReference(page.name) == E.OK) {
		// OK case
	} else {
		// Error case
	}
	...
} else {
	// Error case
}


이를 아래 코드처럼 예외를 사용하면, 오류처리 코드가 원래 코드와 분리되어 코드가 깔끔해질 수 있습니다.

try {
	deletePAge(page);
	registry.deleteReference(page.name);
} catch (Exception e) {
	// Error case
}


만약 여기서 try/catch 구조도 혼란을 줄 수 있다면, 별도 함수로 뽑아내는 것도 가능합니다.
(좀 더 코드를 이해하기 쉽게 하기 위해)


마무리
함수를 잘 만들 수 있는 몇 가지 방법에 대해 소개 했습니다.

 

길이가 짧고, 이름이 좋고, 체계가 잡힌 함수를 만들 수 있습니다. 

 

하지만 함수보다 더 중요한 것은 이러한 함수를이 모여 만들어지는 시스템입니다.


함수부터 잘 만들어 나가면 앞으로 시스템을 만들기도 쉬워진다는 말이라고 이해했습니다.

반응형

'CleanCode' 카테고리의 다른 글

[CleanCode] 오류 처리  (0) 2023.11.10
[CleanCode] 객체와 자료 구조  (0) 2023.11.04
[CleanCode] 형식 맞추기  (2) 2023.11.04
[CleanCode] 주석  (0) 2023.10.21
[CleanCode] 의미있는 이름  (0) 2023.10.01