Refactoring/Refactoring Skill

[Refactoring 기법 #04] 메서드 정리 - 임시변수를 메서드 호출로 전환

JeongKyun 2022. 1. 11.
반응형
※ 오늘의 명언 

만일 디버깅이 벌레를 잡는 과정이라면,

프로그래밍은 그걸 집어넣는 과정이다.

- 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로 선언해서 값을 한 번만 대입할 수 있는 상황을 만들자.
  • 컴파일을 한다.
  • 대입문 우변을 빼내어 메서드로 만들자.
  • 컴파일과 테스트를 실시한다.
  • 전 챕터에서 학습한 내용인 임시변수를 대상으로 임시변수 내용 직접 삽입 기법을 실시한다.

 

뭐든 기본이 중요한 것 같다. 매우 기초적인 내용이여도 이러한 기법들을 잊지않고 생활화해보자.

댓글

💲 많이 본 글