함수 잘 만들기 (from. 클린코드)

어떤 프로그램이든 가장 기본적인 단위가 함수인데요. 함수를 잘 만들려면 어떻게 해야 할까요? 1. 작게. 더 작게. 함수를 만드는 첫 번째 규칙은 ‘작게’입니다. 그리고 함수를 만드는 두 번째 규칙은 ‘더 작게’입니다. (…) 함수가 작을수록 책임이 분명해져서 변경에 의한 연쇄작용에서 자유롭습니다. 가독성 향상과 유지 보수 역시 용이합니다. 함수보다 훨씬 더 큰 개념인 클래스도 SRP(Single Responsibility Principle) 단일 책임 원칙을 가집니다 클래스보다 더 작은 함수는 당연히 작게 만들고 한 번에 한 가지만 해야 합니다. 2. 함수 인수는 적을수록 땡큐 함수에서 이상적인 인수 개수는 적을수록 좋습니다. 만약 인수가 있다면 코드를 읽는 사람이 현시점에서 별로 중요하지 않은 세부사항까지 알아야 하기 때문입니다. 테스트 관점에서 보면 인수는 더 어렵습니다. 갖가지 인수 조합으로 함수를 검증하는 테스트 케이스를 작성하기는 상당히 복잡할 것입니다. 그렇지만 프로그램을 짜다보면 인수가 반드시 필요한 경우가 많으니 3개 이상인 경우에는 객체나 가변 인자를 넘기도록 합니다. 3. 서술적인 이름 함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름은 필수입니다. 단항 함수는 함수와 인수가 동사 / 명사 상을 이루면 좋습니다. 예를 들어 write(name)보다, writeField(name)이 좀 더 나은 이름입니다. 또는 함수 이름에 인수를 넣는 것도 괜찮습니다. assertEquals(expected, actual) 보다, assertExpectedEqualsActual(expected, actual)으로 지으면 인수 순서를 기억할 필요가 없습니다. 함수 이름이 길어도 괜찮습니다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋습니다. 4. try/catch 블록은 별도 함수로 try/catch 블록은 정상 동작과 오류 처리 동작을 뒤섞습니다. 그러므로 try/catch 블록을 별도 함수로 뽑아내는 편이 좋습니다. 예제) 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()) } delete 함수는 모든 오류를 처리합니다. 반면에 deletePageAndAllReferences 함수는 예외를 처리하지 않습니다. 이렇게 정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워집니다. 함수 잘 작성하는 팁. 위와 같은 구현 사항을 잘 적용하려면 어떻게 해야 할까요? 처음에는 기능을 구현하는 서투른 함수를 작성합니다. 중복된 루프도 많고, 이름은 즉흥적이고 인수도 많을 수 있습니다. 그 코드를 단위 테스트 케이스를 만듭니다. 그런 다음 코드를 다듬고, 함수를 만들고, 이름을 바꾸고 중복을 제거합니다. 메서드를 줄이고 순서를 바꿉니다. 이 와중에 코드는 항상 단위 테스트를 통과합니다. 시스템이란 좀 더 풍부하고 표현력이 강한 ‘언어’를 만들어 이야기를 풀어가는 과정입니다. 길이가 짧고, 이름이 좋고, 체계가 잡힌 함수는 분명하고 정확한 언어(단어)에 속합니다. 언어(단어)가 의도와 깔끔하게 맞아떨어진다면 이야기를 풀어가기가 훨씬 쉬워질 것입니다.

Clean Code(클린 코드) | 로버트 C. 마틴 - 교보문고

kyobobook.co.kr

Clean Code(클린 코드) | 로버트 C. 마틴 - 교보문고

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 1월 24일 오후 11:52

 • 

저장 97조회 3,729

댓글 0