[Clean Code] 함수

해당 포스트는 Clean Code의 내용을 참고하여 작성되었습니다.

작게 만들어라

함수를 만드는 첫째 규칙은 작게다. 함수를 만드는 둘째 규칙은 더 작게다. 얼마나 짧아야 좋을까? 각 함수가 너무도 명백히 자신의 책임을 다 할 수 있으면 된다.

각 함수가 멋지게 다음 무대를 준비하면 충분하다. 이것이 답이다.

한 가지만 해라

함수는 한 가지를 해야한다. 그 한 가지를 잘 해야한다. 그 한 가지만을 해야 한다. 함수가 한 가지만을 하기 위해선 다양한 추상화 수준에서 여러 단계를 처리해야 한다.

단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.

서술적인 이름을 사용하라

서술적인 이름은 함수가 하는 일을 좀 더 잘 표현하므로 훨씬 좋은 이름이다. 이름이 길어도 괜찮다. 길고 서술적인 이름이 짧고 어려운 이름이나 서술적인 주석보다 좋다. 이름을 정하느라 시간을 들여도 괜찮다. 이름을 붙일 때는 일관성이 있어야한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다.

코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.

명령과 조회를 분리하라

함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘다 하면 안된다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다. 다음 함수를 보자 public boolean set(String attribute, String value); 이 함수는 attribute 속성을 value로 설정한 후 성공하면 true를 실패하면 false를 반환한다. 그래서 다음과 같은 코드가 만들어진다. if (set("username", "song")) 이 코드는 마치 username이 song으로 설정되어 있는지를 확인하는 코드처럼 보인다. 이름을 바꿔도 어색하다. 해결책은 명령과 조회를 분리하는것이다.

if (attributeExists(“username”)) {

setAttribute(“username”, “sone);

}

오류 처리도 한 가지 작업이다

함수는 한 가지 작업만 해야한다. 오류 처리도 한 가지 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다. 함수에 키워드 try가 있다면 함수는 try 문으로 시작해 catch/finally 문으로 끝나야 한다. try/catch 블록은 별도 함수로 뽑아내는 편이 좋다. 코드 구조에 혼란을 일으키며 정상 동작과 오류 동작을 뒤섞기 때문이다.

정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워진다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/31/Clean%20Code/clean-code3/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.