Refactoring/Refactoring Skill

[Refactoring 기법 #05] 메서드 정리 - 알고리즘 전환

JeongKyun 2022. 1. 16.
※ 오늘의 명언 

코드 수를 기준으로 프로그램의 진도를 측정하는 것은

비행기 제작 진도를 무게로 측정하는 것과 같다.

- Bill Gates

 

서론

이번 글에서는 메서드 안에 있는 알고리즘을 전환하는 방법에 대해 기술해볼 것이다.

 

 

 

목적

알고리즘을 더 분명한 것으로 교체해야 할 땐
해당 메서드의 내용을 새 알고리즘으로 바꿔보자.

 


 

작성 소스

String foundPerson(String[] people) {
for(int i=0; i<people.length; i++){
	if(people[i].equals("Don")){
        return "Don";
	}
	if(people[i].equals("John")){
        return "John";
	}
	if(people[i].equals("Kent")){
        return "Kent";
	}
  }
   return "";
}

위 소스를 보면 같은 구조인데 연속적으로 작성되있는 것을 확인할 수 있다. 이 소스를 보다 직관적이고 양을 줄이기엔 어떤 방법이 좋을까?

 

방법은 바로 알고리즘을 교체해버리는 것이다. 아래의 해결 방법을 보자.

 

 

 

리팩토링 후

String foundPerson(String[] people) {
List candidates = Arrays.asList(new String[] {"Don","John","Kent"});

for(int i=0; i<people.length; i++){
	if(people[i].contains(people[i]))
		return people[i];
        
  	return "";
}

위의 방법처럼 어떤 기능을 수행하기 위한 비교적 간단한 방법이 있따면 복잡한 방법을 좀 더 간단한 방법으로 교체하면 좋다.

 

리팩토링은 복잡한 코드를 간단한 부분으로 쪼갤 수 있지만, 간혹 안고리즘을 전부 삭제하고 더 간단한 알고리즘으로 교체해야 하는 상황에 부딪힐 때가 있다.

 

보통은 위의 예제처럼 중복되는 로직이 있거나 할 때 이러한 방법을 사용하면 보다 소스가 간결해지고 직관적인 좋은 소스로 변경할 수 있다.

 

이러한 알고리즘 전환 기법을 사용한 리팩토링을 하는 방법은 이렇다.

  • 교체할 간결한 알고리즘을 찾아보자.
  • 새롭게 생각한 알고리즘을 적용시키고 많은 테스트를 진행해보자.
  • 결과가 같다면 성공
  • 결과가 다르다면 기존 알고리즘으로 테스트와 실시해 어느 것이 다른지 비교해보자.
  • 해결할 수 있는 부분이 있다면 알고리즘을 전환하여 최종 컴파일을 진행한다.
반응형

댓글

💲 많이 본 글