클린 코드 3장 - 함수
❗한 가지만 해라
함수는 한 가지 일만 해야하고 그 일만 잘 해야 한다. 함수가 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해 한다. 한 함수 내에서 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈리기 때문이다
❗서술적인 이름을 사용하라
함수가 하는 일을 좀 더 잘 표현하는 이름이 좋은 함수 이름이다. 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라고 부를 수 있다. 그래서 한 가지만 하는 작은 함수에 좋은 이름을 붙인다면 이런 원칙을 달성함에 있어 이미 절반은 성공한 것이다. 함수가 작고 단순할수록 서술적인 이름을 고르기도 쉬워진다. 서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렷해지므로 코드를 개선하기 쉬워진다. 또한 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수의 이름은 같은 문구, 명사, 동사를 사용한다.
❗함수 인수
함수에서 가장 이상적인 인수의 개수는 0개이다. 테스트 관점에서 보면 갖가지 인수 조합으로 함수를 검증해야하기 때문에 테스트하기가 상당히 부담스러워진다. 인수가 2~3개 필요하다면 일부를 독자적인 클래스 변수로 선언하는 것이 더 좋다(좌표 등).
❗오류 코드보다 예외를 사용하라
try/catch는 코드 구조에 혼란을 일으키며 정상 동작과 오류 처리 동작을 뒤섞는다. 오류도 한 가지 작업이기 때문에 그래서 try/catch 블록을 별도 함수로 뽑아내는 편이 좋다.
❗함수를 어떻게 짜죠?
소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 초안은 대개 서투르고 어수선하므로 원하는대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다. 처음엔 길고 복잡하며 즉흥적이고 중복된 코드를 작성할 수 있다. 하지만 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든 다음 코드를 다듬고, 함수를 만들고, 중복을 제거해나간다.
❗결론
함수는 언어에서 동사이며 클래스는 명사다. 대가 프로그래머는 시스템을 구현할 프로그램이 아니라 풀어갈 이야기로 여긴다. 프로그래밍 언어라는 수단을 사용해 좀 더 풍부하고 표현력이 강한 언어를 만들어 이야기를 풀어간다. 내가 작성하는 함수가 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 이야기를 풀어가기 쉬워진다는 사실을 기억해야 한다.
❗3장 읽은 소감
지금껏 함수명을 서술형이 아니라 해당 알고리즘 이름이나 간단하게 func이라고만 선언하며 써왔던 경우가 많았다. 실제 개발에선 항상 서술형으로 써오는 것도 보고 클린 코드 책을 보면서 제대로된 이름을 작성하는 것도 프로그래머의 한 소양이라고 할 수 있을 것 같다. 이를 보며 좋은 프로그래머가 될 수 있다록 노력해야겠다고 생각했다.
if (deletePage(page) == E_OK) {
if (registry.deleteReference(page.name) == E_OK) {
if (configKeys.deleteKey(page.name.makeKey()) == E_OK) {
logger.log("page deleted");
} else {
logger.log("configKey not deleted");
}
} else {
logger.log("deleteReference from registry failed");
}
} else {
logger.log("delete failed"); return E_ERROR;
}
public void delete(Page page) {
try {
deletePageAndAllReferences(page);
} catch (Exception e) {
logError(e);
}
}
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
private void logError(Exception e) {
logger.log(e.getMessage());
}
'🔻Extracurricular Activity > IT’s TIME(잇타)' 카테고리의 다른 글
[잇타] 클린코드 스터디 4주차 (0) | 2022.10.01 |
---|---|
[잇타] 클린코드 스터디 2주차 (0) | 2022.09.21 |
[잇타] 클린코드 스터디 1주차 (0) | 2022.09.17 |