Refactoring/Refactoring Skill

[Refactoring 기법 #02] 메서드 정리 - 메서드 내용 직접 삽입

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

항상 이런 생각으로 개발에 임하라.“내 소스를 유지보수하게 될 개발자는내가 어디 살고 있는지 알고 싶어하는 과격한 사이코패스일 것이다.”

- Martin Golding

 

서론

우리는 보통 어떠한 기능을 갖고 있는 로직들을 함수로 만들어 사용한다. 과연 기능을 갖고 있다해서 모두 함수로 만들어 사용하는 것이 좋은 소스라고 볼 수 있을 것인가? 바로 이 질문에 대해 이번 글에서 다뤄볼려고 한다.

 


 

작성 소스

int val = ?;

private int getValue()
{
	return compareValueCheck() ? 2 : 1;
}

boolean compareValueCheck()
{
	return val > 5;
}

위의 소스를 보면 int형은 val가 멤버변수로 선언되어있는 상태이고 compareValueCheck()라는 int형 함수를 활용하여 최종 값을 얻어오는 로직을 구현한 상태이다. 뭐 물론 이렇게 사용해도 문제되는 것은 당연히 없다. 그렇지만 리팩토링 책에서는 이렇게 제안한다.

 

"메서드 기능이 너무 단순해서 메서드명만 봐도 너무 빤할 때는 그 메소드의 기능을 호출하는 메서드를 넣어버리고 해당 하는 그 메서드는 삭제해버리자"

 

위 내용을 참고하여 수정을 해보자.

 

 

 

리팩토링 후

int val = ?;

private int getValue()
{
	return (val > 5) ? 2 : 1;
}

 

어떤가? 너무 간단해졌다. 물론 해당 compareValueCheck()의 함수가 어디선가 재정의가 되고 있는것이 있다면 당연히 없어지면 문제가 생기지만 아니라면 위의 방법으로 구현하는 것이 깔끔하다고 볼 수 있다.

 

리팩토링의 핵심은 의도한 기능을 한눈에 파악할 수 있는 직관적인 메서드명을 사용하는 것과 메서드를 간결하게 만드는 것이다.

 

그래야 메서드가 더 명료해지고 코드를 알아보기 쉽기 때문이다. 하지만 위와 같이 간혹 메서드명에 모든 기능이 반영될 정도로 메서드 기능이 지나치게 단순할 때가 있다.

 

이럴땐 그 메서드에 포함된 내용을 호출한 부분에 삽입하여 메서드를 삭제하는 것이 좋은 방법이라고 할 수 있다.

 


 

메서드 내용 직접 삽입 리팩토링 방법

위의 리팩토링 방법을 기술하면 이렇다.

 

  • 메서드가 어디선가 재정의가 되어있는가? 메서드 삭제를 위해선 가장 중요한 부분이니 확인을 꼭 해보자!
  • 그 메서드를 호출하는 부분을 모두 찾아놓는다.
  • 호출 하는 부분을 메서드의 내용으로 교체한다.
  • 테스트를 실시해본다. 필수!
  • 테스트를 해서 이상이 없다면 기존 메서드를 삭제한다.

 

위 제안한 방법대로 진행한다면 메서드 내용을 직접 삽입하여 수정하는데 문제가 생기진 않을 것이니 참고하여 현재 사용하고있는 프로그램에서 리팩토링할 부분을 찾아 적용시켜보면 좋을 것 같다.

 

댓글

💲 많이 본 글