프로그래밍/책

클린코드 2장

 

목차 [함수]

: 함수를 잘 만드는 법에 대해

 


 

 

1. 작게 만들어라!

- 둘째 규칙은 '더 작게!'다. 중첩 구조가 생길만큼 함수가 커져선 안된다. 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다.

 

 

 


 

 

2. 한 가지만 해라!

- 문제는 '한 가지'가 무엇인지 알기 어렵다는 점이다.

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

 

 

 


 

 

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

- '내려가기 규칙': 한 함수 다음엔 추상화 수준이 한 단계 낮은 함수가 온다.

위에서 아래로 이야기처럼 읽혀야 좋다.

 

 

 


 

 

4. Switch

- switch문은 N가지를 처리한다. 안타깝게도 Switch문을 완전히 피할 방법은 없다.

다형성을 이용하라. (switch문을 추상 팩토리에 숨기는 등).

나는 switch문을 단 한 번만 참아준다. 다형적 객체를 생성하는 코드 안에서다.

 

 

 


 

 

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

- 이름이 길어도 괜찮다. 길고 서술적인 이름이 짧고 어려운 이름보다, 서술적인 주석보다 좋다. 이런저런 이름을 넣어 코드를 읽어보라. 일관성 있는 이름을 붙여라.

 

 

 


 

 

6. 함수 인수

- 이상적인 인수 개수는 0개다. 차선은 1개다.

인수가 1개인 함수의 흔한 경우는 두 가지다. 1. 인수에 질문을 던지는 경우 2. 인수를 뭔가로 변환해 반환하는 경우

플래그 인수는 추하다. 함수가 여러 가지를 처리한다고 공표하는 셈이니까! render(true)가 있다면 renderForSuite(), renderFsingleTest()로 나눠라.

*플래그 인수는 함수에 Bool / String / Enum 등을 함께 넘겨서 로직을 분기하는 방법이다

인수가 2~3개 필요하다면 클래스 변수로 선언하는 것을 고려하라.

 

 

 


 

 

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

- 출력 인수를 피하라.

public void appendFooter(StringBuffer report) {

}

 

위 함수는 StringBuffer 객체에 Footer를 추가(append)하는 함수이다. 이 때의 인수를 '출력인수'라고 한다. 출력인수를 피해야하는 이유는 '인지적인 이유'로 가독성을 떨어트리기 때문이다. 

 

 

 


 

 

8. 명령과 조회를 분리하라!

- 함수는 수행하거나 답하거나 둘 중 하나만 해야 한다.

 

 

 


 

 

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

- 명령 함수에서 오류 코드를 반환하는 것은 명령/조회 분리 규칙을 위반한다. 자칫하면 if 문에서 명령을 표현식으로 사용하기 쉬운 탓이다. Ex) if (deletePage(page) == E_OK)

오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.

Try/Catch 블록은 별도 함수로 뽑아내는 편이 좋다.

 

 

 


 

 

10. 반복하지 마라!

- 객체 지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다. 구조적 프로그래밍, AOP, COP 모두 어떤 면에서 보면 중복 제거 전략이다.

 

 

 


 

 

11. 구조적 프로그래밍

- 함수를 작게 만든다면 간혹 return, break, continue를 여러 차례 사용해도 괜찮다. 오히려 때로는 단일 입/출구 규칙보다 의도를 표현하기 쉬워진다.

 

 


 

 

12. 함수를 어떻게 짜죠?

- 글짓기와 비슷하다. 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 처음엔 길고 복잡하다. 들여쓰기도 많고 중복된 루프도 많다. 하지만 나는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다. 그런 후 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 때로는 전체 클래스를 쪼개기도 한다. 처음부터 탁 짜내지 않는다. 그게 가능한 사람은 없으리라.

 

 

 


 

 

13. 결론

- 함수는 그 언어에서 동사며, 클래스는 명사다. 여기서 설명한 규칙을 따른다면 길이가 짧고, 이름이 좋고, 체계가 집한 함수가 나오리라. 하지만 진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다. 여러분이 작성하는 함수가 분명하고 정확한 언어로 깔끔하게 맞아떨어져야 이야기를 풀어가기가 쉬워진다는 사실을 기억하라.

 

 

 

'프로그래밍 > ' 카테고리의 다른 글

클린코드 1장  (0) 2022.07.07
책에 대한 글들  (0) 2021.07.12
[클린 아키텍처 -소프트웨어 구조와 설계의 원칙]  (0) 2021.07.12