Post

[Book - Clean Code] 3. 함수

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

의도를 분명히 표현하는 함수 또는 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있는 함수를 구현하려면 증거나 자료를 제시하기는 어렵지만 함수를 첫째도 작게! 둘째도 작게! 만드는 것이다.

함수를 쉽게 읽고 이해하기 위해서는 중첩 구조가 생길만큼 그 함수가 커져서는 안된다.
즉, 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.

함수가 확실히 한 가지 작업만 하려면 함수 당 추상화 수준은 하나로 통일하자!
하지만, 추상화 수준이 하나인 함수를 구현하기는 쉽지 않다.
그렇지만 매우 중요한 규칙이므로 짧으면서도 한 가지만하는 함수를 구현하자.

함수명을 서술적인 이름으로 짓자!
이름이 길어도 괜찮다.
길고 서술적인 이름이 짧고 어려운 이름보다 좋다.
길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
하지만 이름을 붙일 때는 일관성이 있어야 한다.

함수 인수 순서를 기억할 필요가 없도록 함수명에 인수 이름을 순서대로 넣는 식으로 짓는다.
참고로 함수 인수는 적을수록 좋다.

객체 지향 언어에서는 출력 인수로 사용하라고 설계한 변수 this가 있기 때문에 출력 인수를 사용할 필요가 거의 없다.
따라서, 일반적으로 출력 인수는 피해야 하며, 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다.

함수는 뭔가를 수행하거나, 뭔가에 답하거나 둘 다 하게되면 혼란을 초래하기 때문에 둘 중 하나만 해야 한다.

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

try/catch 블록을 별도 함수로 뽑아내는 편이 좋다.

1
2
3
4
5
6
7
8
public void separation() {
    try {
        normalRun();
    } catch(Exception e) {
        logError(e);
    }
}

정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워진다.
또한, 오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생되기 때문에 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다.

함수명을 지을 때나, 함수를 만들 때 어떻게 해야 좋은 함수가 될 수 있을지에 대해 더 알게 되었다.
좋은 함수란 이야기처럼 순서대로 읽기 쉬운 함수, 어떤 동작을 할 지 명확하게 알 수 있는 함수라고 생각한다.

This post is licensed under CC BY 4.0 by the author.

© Yn3. Some rights reserved.