"재구성-기존 코드 디자인 개선"독서 노트----Introduce Explaning Variable

3660 단어 variable
때때로 당신은 일련의 복잡한 표현식의 연속 연산을 만날 수 있다. 이럴 때 당신은 이렇게 길거나 이렇게 복잡한 긴 함수를 근본적으로 당해내지 못할 수도 있다.이럴 때 임시 변수를 인용하여 그들의 결과를 저장하고, 이 긴 함수의 결과를 하나의 임시 변수로 나누어 함수를 명확하게 할 수 있다.그러나 여기서 제 생각은 작가의 생각과 같습니다. 저는 복잡한 함수를 명확하게 하기 위해 Extract Method를 사용하는 경향이 강하고 인트로듀스 Explaning Vaiable를 사용하지 않으려고 합니다. 왜냐하면 Extract Method의 장점이 많기 때문입니다. 임시 변수를 증가하지 않고 함수의 길이를 늘리는 것 외에 그의 생명 주기도 임시 변수보다 길어서 클래스의 모든 구성원들이 사용할 수 있습니다.임시 변수가 Extract Method를 진행하기 어려워야만 나는 진정으로 임시 변수로 해결하는 것을 고려할 수 있다.
방법은 일반적으로 const로 임시 변수를 설명하여 표현식의 값을 저장한 다음에 표현식 결과를 인용하는 곳을 바꾸는 것이다.다음은 구체적인 예를 살펴보자
double price()

{

    return m_quantity * m_itemPrice - qMax(0, m_quantity - 500) * m_itemPrice * 0.05

        + qMin(m_quantity * m_itemPrice * 0.1, 100.0);

}

이런 긴 함수에 대해 우리는 당해내기 어렵다. 인트로듀스 Explaning Variable를 진행하여 m 를quanity * m_itemPrice에서 추출한 결과 다음과 같습니다.
double price()

{

    const double basePrice = m_quantity * m_itemPrice;

    return basePrice - qMax(0, m_quantity - 500) * m_itemPrice * 0.05

        + qMin(basePrice * m_itemPrice * 0.1, 100.0);

}

베이스프라이스는 const double 형식으로 설명하고 초기화하여 이 표현식 결과를 인용하는 모든 부분을 대체합니다. 알고리즘의 논리가 명확하다는 것을 알 수 있습니다.
여기서 제 견해를 검증하기 위해 Extract Method를 사용해 재구성해 결과가 어떻게 다른지 봅시다.
   
double price()

{

    return basePrice() - qMax(0, m_quantity - 500) * m_itemPrice * 0.05

        + qMin(basePrice() * 0.1, 100.0);

}





double basePrice()

{

    return m_quantity * m_itemPrice;

}

Extract Method 기법을 사용한 결과를 보면 다음과 같은 몇 가지 장점이 있음을 알 수 있다.
【1】도 가장 뚜렷하다. Extract Method 이후의 결과는 Introduce Explaning Variable보다 뚜렷하고 간단하다. 사실 이것도 확실하다. 왜냐하면 후자는 임시 변수를 도입하여 함수의 길이를 더욱 높일 수 있기 때문이다.
【2】basePrice의 추출에 있어 price()라는 함수에 대해 Introduce Explaning Variable에서 추출한 임시 변수는 이 함수에서만 사용할 수 있고 Extract Method는 클래스의 모든 곳에서 사용할 수 있다.
종합적으로 보면 Extract Method는 Introduce Explaning Variable보다 훨씬 쓰기 좋고 작업량에 있어서 양자는 거의 차이가 없다는 것을 알 수 있다.그럼 학우들이 물어볼 거예요. 그럼 이 재구성 수법은 언제 쓸 거예요?아직도 있다. Extract Method가 순조롭게 전개되지 않을 때, 예를 들어 임시 변수가 많아서 추출할 수 없기 때문에 이럴 때 임시 변수를 도입하는 것이 쉽다.그리고 코드 논리가 명확해질 때까지 기다렸다가 Replace Temp with Query를 사용하면 임시 변수를 쉽게 제거할 수 있다.만약 당신이 최종적으로 Replace Method with Method Object를 사용하려고 한다면, 이 수법은 당신의 추출에 가치를 제공할 것이다.

좋은 웹페이지 즐겨찾기