프로그램 아키텍쳐/Refactoring

조건 분기를 단순하게 변경하기

본클라쓰 2010. 12. 9. 13:29

 

조건의 분해(Decompose Conditional)

 

if-else문의 조건이 너무 복잡할 경우 메소드로 치환해 알기 쉬운 코드로 변경한다.

 

변경하기 전의 프로그램 코드)

if( money >= 100 && tip >= 100 && score >=100 ) {

    pay = money ++;

    tip += bonus;

} else {

    pay = money + tip;

}

 

위와 같은 코드를 메소드로 치환하여 다음과 같이 변경한다.

 

if( isBonus() ) {

    pay = payBonus();

} else {

    pay = pay();

}

 

또한 조건 분기안에 같은 코드가 있다면 이 코드를 조건 분기 밖으로 이동시켜 작성하는 방법이 ‘중복된 조건기술의 단편을 종합(Consolidate Duplicate Conditional Fragments)’이라 한다.

 

 

 

 

조건 기술을 가드(Guard)절로 치환하기( Replace Nested Conditional with Guard Clauses)

 

if-else가 중첩 되어 있어 정상처리가 이해하기 힘들 경우 가드절을 사용해 빨리 return 또는 throw하는 방법이다.

 

if ( x < 0 ) {

 

} else {

    if ( y < 0 ) {

    } else {

        if ( width <=0 ) {

            result = false;

        } else {

            if ( height <= 0 ) { result = false; }

        }

    }

 

 

위와 같은 조건문은 이해하기 어렵다. 아래와 같이 코드를 변경한다.

 

if ( x < 0 ) return false;

if ( y < 0 ) return false;

if ( width <= 0 ) return false;

if ( height <= 0 ) return false;