Book
[Clean Code] TIL - 220127
refigo
2022. 1. 27. 12:40
3장. 함수
함수의 인수를 최소화 하고 중복을 줄이고 이름대로만 동작하자.
1. 생각
아직 자바 언어를 모르고 객체지향에 익숙하지 않아서 바로 이해하기 어려운 부분들이 있었다.
하지만 함수의 인수를 최대한 줄이고 중복을 없애고 이름에 적힌대로만 동작하게 만드는 것은 언제나 중요하다고 생각이 든다.
또 소프트웨어를 짜는 것은 글쓰기와 비슷하다는 말을 이전에 몇 번 들었고 이 책에서도 나왔다.
처음에는 그저 자신의 자신의 생각을 길고 장황하게 표현하고 이후에 계속해서 다듬으면서 보기 좋은 이야기를 풀어 간다는 것이다.
코드는 구현할 때 부터 바로 잘 쓰면 좋겠지만 계속해서 보완점을 찾고 지속적으로 개선하는 것이 중요한 것 같다.
2. 기억하고 싶은 문장들
- 함수 인수
인수는 개념을 이해하기 어렵게 만든다.
최선은 입력 인수가 없는 경우이며, 차선은 입력 인수가 1개뿐인 경우다.
많이 쓰는 단항 형식
함수에 인수 1개를 넘기는 이유로 가장 흔한 경우는 두 가지다. 하나는 인수에 질문을 던지는 경우다. 다른 하나는 이수를 뭔가로 변환해 결과를 반환하는 경우다.
인수 객체
인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 짚어본다.
동사와 키워드
함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다. 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다.
- 부수 효과를 일으키지 마라!
부수 효과는 거짓말이다. 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른 짓도 하니까.
많은 경우 시간적인 결합이나 순서 종속성을 초래한다.
출력 인수
하지만 객체 지향 언어에서는 출력 인수를 사용할 필요가 거의 없다. 출력 인수로 사용하라고 설계한 변수가 바로 this이기 때문이다.
- 명령과 조회를 분리하라!
함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다.
객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다.
- 오류 코드보다 예외를 사용하라!
함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다.
- 반복하지 마라!
중복은 문제다. 코드 길이가 늘어날 뿐 아니라 알고리즘이 변하면 네 곳이나 손봐야 하니까. 게다가 어느 한곳이라도 빠뜨리는 바람에 오류가 발생할 확률도 네 배나 높다.
어쩌면 중복은 소프트웨어에서 모든 악의 근원이다. 많은 원칙과 기법이 중복을 없애거나 제어할 목적으로 나왔다.
- 함수를 어떻게 짜죠?
소프트웨어를 짜는 행위는 여느 글쓰기와 비슷하다.
처음에는 길고 복잡하다.
그런 다음 나는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
처음부터 탁 짜내지 않는다. 그게 가능한 사람은 없으리라.
- 결론
대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.
이 장은 함수를 잘 만드는 기교를 소개했다. 여기서 설명한 규칙을 따른다면 길이가 짧고, 이름이 좋고, 체계가 잡힌 함수가 나오리라. 하지만 진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다는 사실을 명심하기 바란다.