※ 오늘의 명언
코드 수를 기준으로 프로그램의 진도를 측정하는 것은
비행기 제작 진도를 무게로 측정하는 것과 같다.
- 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 "";
}
위의 방법처럼 어떤 기능을 수행하기 위한 비교적 간단한 방법이 있따면 복잡한 방법을 좀 더 간단한 방법으로 교체하면 좋다.
리팩토링은 복잡한 코드를 간단한 부분으로 쪼갤 수 있지만, 간혹 안고리즘을 전부 삭제하고 더 간단한 알고리즘으로 교체해야 하는 상황에 부딪힐 때가 있다.
보통은 위의 예제처럼 중복되는 로직이 있거나 할 때 이러한 방법을 사용하면 보다 소스가 간결해지고 직관적인 좋은 소스로 변경할 수 있다.
이러한 알고리즘 전환 기법을 사용한 리팩토링을 하는 방법은 이렇다.
- 교체할 간결한 알고리즘을 찾아보자.
- 새롭게 생각한 알고리즘을 적용시키고 많은 테스트를 진행해보자.
- 결과가 같다면 성공
- 결과가 다르다면 기존 알고리즘으로 테스트와 실시해 어느 것이 다른지 비교해보자.
- 해결할 수 있는 부분이 있다면 알고리즘을 전환하여 최종 컴파일을 진행한다.
반응형
'Refactoring > Refactoring Skill' 카테고리의 다른 글
[Refactoring 기법 #04] 메서드 정리 - 임시변수를 메서드 호출로 전환 (0) | 2022.01.11 |
---|---|
[Refactoring 기법 #03] 메서드 정리 - 임시변수 내용 직접 삽입 (0) | 2022.01.09 |
[Refactoring 기법 #02] 메서드 정리 - 메서드 내용 직접 삽입 (0) | 2022.01.09 |
[Refactoring 기법 #01] 메서드 정리 - 메서드 추출 (0) | 2022.01.04 |
[Refactoring] 리팩토링(Refactoring)이란? (리팩토링 효과 / 해야 하는 이유) (0) | 2022.01.03 |
댓글