Book Record/Clean Code

[Clean Code] 3장 함수

lakelight 2022. 9. 27. 17:56
728x90
반응형
깨끗한 코드를 작성하기 위한 세번째 기록

 

작게 만들어라!

함수를 만드는 첫째 규칙은 ‘작게!’ 다. 함수를 만드는 둘째 규칙은 ‘더 작게!’ 다.
각 함수가 명백하게 하나표현하도록 하는 것이 좋다.

  • 블록과 들여쓰기 if문 /else문 /while문 등에 들어가는 블록은 한 줄이어야 한다는 의미이다.

 

한 가지만 해라!

함수한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
우리가 함수를 만드는 이유큰 개념을 다음 추상화 수준에서 여러 단계나눠 수행하기 위함이다.

 

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

함수가 확실히 ‘한 가지’ 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.

  • 위에서 아래로 코드 읽기: 내려가기 규칙 코드는 위에서 아래로 이야기처럼 읽고, 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.
public abstract class Employee{
	public abstract boolean isPayday();
	public abstract Money calculatePay();
	public abstract void deliverPay(Money pay);
}

public interface EmployeeFactory{
	public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}

public class EmployeeFactoryImpl implements EmployeeFactory {
	public Employee makeEmployee(EmplyeeRecord r) throws InvalidEmployeeType{
		switch(r.type){
			case COMMISSIONED:
				return new CommissionedEmployee(r);
			case HOURLY:
				return new HourlyEmployee(r);
			case SALARIED:
				return new SalariedEmployee(r);
			default:
				throw new InvalidEmployeeType(r.type);
			

 

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

함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다.

 

함수 인수

함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개(단항)이고 (다항)은 최대한 피하기

<인수가 1개 넘는 이유>

  1. 인수에 질문을 던지는 경우
  2. 인수를 뭔가로 변환해 결과를 반환하는 경우

<플래그 인수는 추하다>

함수로 부울 값을 넘기는 관례는 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 것

 

명령과 조회를 분리하라!

함수는 무엇인가를 수행하거나, 무엇인가에 답하거나 둘 중 하나만 해야한다.

 

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

<Try/Catch 블록을 별도 함수로 뽑아내기>

public void deletePage(Page page){
	try{
		deletePageAndAllReferences(page);
	}
	catch(Exception e) {
		logError(e);
	}
}

private void deletePageAndAllReferences(Page page) throws Exception{
	deletePage(page);
	registry.deleteReference(page.name);
	configKeys.delteKey(page.name.makeKey());
}

private void logError(Exception e){
	logger.log(e.getMessage());
}

 

구조적 프로그래밍

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

즉, 함수는 return 문이 하나 여야 한다는 말이다. 루프 안에서 break나 continue를 사용해선 안되며 goto는 절대로, 절대로 안된다.

 

클린 코드 법칙

  1. 각 함수는 명백하게 하나를 표현하도록 하는 것이 좋다.
  2. 함수를 만드는 이유는 큰 개념을 여러 단계로 나누기 위함이다.
  3. 함수의 이름은 서술 적인 것을 사용 해야한다.
  4. 함수의 인수는 0개가 이상적이다. 다항은 최대한 피하는 것이 좋다.
  5. 함수는 무엇을 수행하거나, 답하거나 두 기능 중 하나만 해야 한다.
  6. 오류 코드 보다는 예외를 사용해라.
  7. 함수는 return 문이 하나 여야 한다.

 

마무리

함수를 구조적으로 만들기 위해 노력하겠습니다.
함수는 한 가지 기능만 하고 함수의 이름은 그 기능을 표현 하도록 만들겠습니다.
오늘도 여러가지의 클린코드 법칙을 배웠는데 실무에서 잘 활용할 수 있도록 노력하겠습니다.

 

[출처]
Clean Code (클린 코드,애자일 소프트웨어 장인 정신), 로버트 C. 마틴 저

728x90
반응형

'Book Record > Clean Code' 카테고리의 다른 글

[Clean Code] 6장 객체와 자료 구조  (2) 2022.10.07
[Clean Code] 5장 형식 맞추기  (4) 2022.10.06
[Clean Code] 4장 주석  (0) 2022.09.27
[Clean Code] 2장 의미있는 이름  (0) 2022.09.26
[Clean Code] 1장 깨끗한 코드  (0) 2022.09.26