※ 오늘의 명언
만일 디버깅이 벌레를 잡는 과정이라면,
프로그래밍은 그걸 집어넣는 과정이다.
- Edsger W. Dijkstra, 구조적 프로그래밍, 세마포어로 유명한 컴퓨터 과학자
서론
이번에 공부할 내용은 메서드 정리 파트에서 임시변수를 메서드 호출로 전환하는 방법에 대해 서술해 볼 것이다.
작성소스
double basePrice = _quantity * _itemPrice;
if(basePrice > 1000)
return basePrice * 0.95;
else
return basePrice * 0.98;
위의 소스에서 어떤 것을 리팩토링 할 수 있을까? 책에서 제안하는 내용은 이렇다.
"수식의 결과를 저장하는 임시변수가 있을 땐 그 수식을 빼내어 메서드로 만든 후, 임시변수 참조 부분을 전부 수식으로 교체하자. 새로 만든 메서드는 다른 메서드에서도 호출 가능하다."
위 내용을 리팩토링 소스로 풀어보자.
리팩토링 후 소스
if(basePrice() > 1000)
return basePrice() * 0.95;
else
return basePrice() * 0.98;
//메서드로 전환
double basePrice()
{
return _quantity * _itemPrice;
}
우리가 자주 사용하는 "임시변수"는 일시적이고 적용이 국소적 범위로 제한된다는 단점이 있다.
임시변수는 자신이 속한 메서드 안에서만 인식되므로, 그 임시변수에 접근하려다 보면 코드는 길어지게 마련이다. 임시변수를 메서드 호출로 수정하면 클래스 안 모든 메서드가 그 정보에 접근할 수 있기에 이렇게 작성을 하면 클래스의 코드는 더 깔끔해지기 마련이다.
이러한 리팩토링을 거치는 가장 단순한 상황은 임시변수에 값이 한 번만 대입되고 대입문을 이루는 수식에 문제가 없을 때의 상황이다. 다른 경우도 안되는 것은 아니지만 보통 이러한 경우에 사용이 된다고 보면 된다.
"임시변수를 메서드로 전환" 리팩토링 방법
- 값이 한 번만 대입되는 임시변수를 찾자
- 그 임시변수를 final로 선언해서 값을 한 번만 대입할 수 있는 상황을 만들자.
- 컴파일을 한다.
- 대입문 우변을 빼내어 메서드로 만들자.
- 컴파일과 테스트를 실시한다.
- 전 챕터에서 학습한 내용인 임시변수를 대상으로 임시변수 내용 직접 삽입 기법을 실시한다.
뭐든 기본이 중요한 것 같다. 매우 기초적인 내용이여도 이러한 기법들을 잊지않고 생활화해보자.
반응형
'Refactoring > Refactoring Skill' 카테고리의 다른 글
[Refactoring 기법 #05] 메서드 정리 - 알고리즘 전환 (0) | 2022.01.16 |
---|---|
[Refactoring 기법 #03] 메서드 정리 - 임시변수 내용 직접 삽입 (0) | 2022.01.09 |
[Refactoring 기법 #02] 메서드 정리 - 메서드 내용 직접 삽입 (0) | 2022.01.09 |
[Refactoring 기법 #01] 메서드 정리 - 메서드 추출 (0) | 2022.01.04 |
[Refactoring] 리팩토링(Refactoring)이란? (리팩토링 효과 / 해야 하는 이유) (0) | 2022.01.03 |
댓글