-
3장 함수DevBook/CleanCode 2021. 7. 1. 16:51
명령과 조회를 분리하라!
함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나를 수행하도록 해야 함 -> 객체 상태 변경하거나 아니면 객체 정보 반환하거나 둘 중 하나
[예시]
문제) 수행 내용이 명확하지 않은 함수(명령과 조회를 하나의 함수에서 수행함)
public boolean set(String attribute, String value);
-> 주어진 함수는 이름이 attribute인 속성을 찾아 값을 value로 설정한 후 성공하면 true를 반환함
if(set("username", "fordevelop")) . . .
-> 실제 사용 시 코드를 보면, 'username이 fordevelop으로 설정되어 있는지 확인하는 코드인지' or 'username을 fordevelop으로 설정하는 코드인지' 의미가 모호함
해결) 명령과 조회를 분리하기
if (attributeExists("username")){ setAttribute("username", "fordevelop"); . . . }
-> attributeExists()을 통해 속성을 조회하고, setAttribute()를 통해 해당 속성에 주어진 값을 설정하도록 함
오류코드보다 예외를 사용하라!
상황) 오류 코드 사용하는 경우
if (deletedPage(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; }
-> 여러 단계로 중첩되는 코드 야기함
-> 오류 코드 반환 시 오류 코드를 곧바로 처리해야 한다는 문제
개선 상황1) 오류 코드 대신 예외 사용하기 : try-catch 블록 사용하는 경우
try{ deletePage(page); registry.deleteReference(page.name); configKeys.deleteKey(page.name.makeKey()); } catch(Exception e){ logger.log(e.getMessage()); }
-> but 코드 구조에 혼란을 줄 수 있음
개선 상황2) 오류 코드 대신 예외 사용하기 : 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.deletedReference(page.name); configKeys.deleteKey(page.name.makeKey()); } private void logError(Exception e){ logger.log(e.getMessage); }
-> 함수는 한 가지 작업만 해야한다고 했을 때, 오류 처리도 '한 가지' 작업에 속함
-> 정상 동작과 오류 처리 동작을 분리하여 코드를 가독성 높이고, 수정하기 쉬워짐
함수를 어떻게 짜죠?
마음 가짐 : 소프트웨어를 짜는 행위는 글짓기와 비슷하다! 글을 작성할 때 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 함수를 짤 때도 마찬가지고 처음에는 길고, 복잡하고, 중복된 루프도 많다. 하지만 함수를 다시보며 개선해나가면 된다!
인상깊은 말
시스템은 구현할 프로그램이 아니라 풀어갈 이야기다. 프로그래밍 언어라는 수단을 사용해 풍부하고 표현력이 강한 언어를 만들어 이야기를 풀어간다. 시스템에서 발생하는 모든 동작을 설명하는 함수 계층이 바로 그 언어에 속한다.
프로그래밍으로 하나의 이야기를 만든다..! 낭만적이다
'DevBook > CleanCode' 카테고리의 다른 글
4장 주석 (0) 2021.07.08 2장 의미있는 이름 (0) 2021.06.29