본문 바로가기
책/Clean Code

[Clean Code] 3장 함수

by 오오오니 2024. 1. 30.

[Clean Code] 3장 함수

생성일: 2024년 1월 17일 오후 4:42

추상화 수준


작게 만들어라!


한 가지만 해라


한 가지만 하려면 ? 함수 당 추상화 수준은 하나로!


Switch 문


서술적인 이름을 사용하라!


함수 인수


todo: 함수 분석해보기

부수 효과를 일으키지 마라!


예를 들어 비밀번호를 암호화하는 함수에서 유저의 세션을 초기화하기

문제점

  1. 시간적인 결합 초래
  2. 잘못하면 세션 정보 날아갈 수 있음

명령과 조회를 분리하라!


//모호한 의미의 코드 : username이 unclebob으로 설정되어 있는지 확인하는 코드같음
if (set("username", "unclebob"))..

//→
if(attributeExists(”username”)){
    setAttributo(”username”,”unclebob”)
}

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


오류코드를 반환하면 if문에서 표현식으로 활용하기 쉽다.

if(deletePage(page)==E_OK)

문제

중첩되는 코드 야기 & 오류코드 바로 처리

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());
}

반복하지 마라!


3-7처럼 중복을 없앨 수 있다.

   private void includeSetupAndTeardownPage() throws Exception {        
            includeSetupPage();        
            includePageContent();        
            includeTeardownPages();        
            updatePageContent();    
}

구조적 프로그래밍, AOP,COP등이 중복제거전략이다.

구조적 프로그래밍


모든 함수와 함수 내 모든 블록에 entry 와 exit가 하나만 존재해야 한다.

  • break, continuem goto 안됨
    • 함수를 작게 만든다면 가능 (goto 뺴고)

함수를 어떻게 짜죠?


  1. 코드를 다듬고
  2. 함수를 만들고
  3. 이름을 바꾸고
  4. 중복을 제거하고
  5. 메서드를 줄이고
  6. 순서를 바꾼다.

' > Clean Code' 카테고리의 다른 글

[Clean Code] 11장 시스템  (0) 2025.03.17
[Clean Code] 9장 단위 테스트  (0) 2025.03.17
[Clean Code] 7 장 오류 처리  (0) 2025.03.17
[Clean Code] 5장 형식 맞추기  (0) 2025.03.17
[Clean Code] 1장 깨끗한 코드  (2) 2024.01.30