본문 바로가기
CleanCode

Clean Code 짜기4

by 김대근'IT공부 2019. 10. 22.

명령과 조회를 분리해야한다.

함수 수행시 명령과 조회를 동시에 하게 되면 혼란을 초래해
코드 확인시 해석이 어려울수 있다.

public boolean set(String attribute, String value);
if (set("username", "userA"))

attribute인 속성값을 찾아 value로 설정한 후 

성공-true 실패 - false 반환 코드이다.

코드를 해석하는 입장에서는 "username" 이 "userA"으로 설정된건지 확인하는 코드인지

아니면 "username"을"userA"로 설정하는 코드인지 혼란이 온다.
"set" 이라는 단어가 동사인지 형용사인지 분간하기 힘들기 때문이다.


해결책은 코드를 명령과 조회를 분리해서 짜는 방법이 있다 .

if (attributeExists("username")) { 
setAttribute("username", "userA");
...
}
이렇게 되면 username 을 userA로 설정하는데 성공하면.. 으로 해석이 가능하다.
--------------------------------------

오류 코드보다 예외를 사용하자

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.logC'configKey not deleted");
            }
                } else {
            logger.logC'deleteReference from registry failed");
            }
                } else { 
            logger.log("delete failed"); 
                return E_ERR0R;
            }

위 코드는 여러 단계로 중첩되는 코드를 불러일으킨다.

 

----------------------------------------
반면 오류코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되어 깔끔해진다.

try {
    deletePage(page);
    registry.deleteReference(page.name); 
    configKeys.deleteKey(page.name.makeKey());
    }
    catch (Exception e) { 
        logger.log(e.getMessage());
    }

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)

반응형

'CleanCode' 카테고리의 다른 글

Clean Code 짜기6  (0) 2019.10.24
Clean Code 짜기5  (0) 2019.10.24
Clean Code 짜기3  (0) 2019.10.21
Clean Code 짜기2  (0) 2019.10.21
Clean Code 짜기 1  (0) 2019.10.13