[java] JUnit을 이용한 코드 리팩토링 테스트

코드 리팩토링은 소프트웨어 개발 과정에서 기존 코드의 구조를 개선하여 가독성, 유지보수성, 성능 등을 향상시키는 작업입니다. 코드를 리팩토링할 때는 기능이 변경되지 않도록 테스트를 작성하고 실행해야 합니다. 이 글에서는 JUnit을 사용하여 코드 리팩토링 테스트를 어떻게 수행할 수 있는지 알아보겠습니다.

JUnit 소개

JUnit은 자바에서 단위 테스트를 작성하는 데 사용되는 테스팅 프레임워크입니다. JUnit을 사용하면 각각의 메서드나 클래스 단위로 테스트를 작성하고 실행할 수 있습니다. JUnit은 테스트 케이스를 작성하는 데 필요한 어노테이션과 어서션 등의 다양한 기능을 제공합니다.

코드 리팩토링을 위한 테스트 작성 방법

  1. 코드를 변경하기 전에 테스트 작성: 코드를 변경하기 전에 현재 코드의 동작을 확인하는 테스트를 작성합니다. 이 테스트는 기존의 코드가 제대로 동작하는지를 확인하기 위한 용도로 사용됩니다.

  2. 코드 수정: 리팩토링을 수행하고 코드를 수정합니다. 이때 기능이 변경되지 않도록 주의해야 합니다.

  3. 테스트 실행: JUnit을 사용하여 작성한 테스트를 실행합니다. 이때 테스트를 통과해야만 리팩토링한 코드가 제대로 동작한다는 것을 확인할 수 있습니다.

  4. 테스트 실패 시 리팩토링 수정: 만약 테스트가 실패한다면, 리팩토링한 코드에 오류가 있는 것입니다. 이때는 수정된 코드를 다시 검토하고 테스트 실패를 해결하기 위해 수정해야 합니다.

  5. 테스트 통과 확인: 테스트가 모두 통과한다면 리팩토링이 성공적으로 이루어졌다는 것을 확인할 수 있습니다. 이제 개선된 코드로 작업을 계속할 수 있습니다.

예시 코드

다음은 숫자를 입력받아 짝수인지 확인하는 메서드를 리팩토링하는 과정 예시입니다.

public class NumberUtils {
    public static boolean isEven(int number){
        return number % 2 == 0;
    }
}

위 코드는 주어진 숫자가 짝수인지 아닌지를 판별하는 기능을 제공합니다. 이 코드를 리팩토링하여 가독성을 높이고 성능을 개선할 수 있습니다.

리팩토링을 위해 다음과 같이 테스트를 작성합니다.

import org.junit.Test;
import static org.junit.Assert.*;

public class NumberUtilsTest {
    @Test
    public void testIsEven() {
        assertTrue(NumberUtils.isEven(2));
        assertFalse(NumberUtils.isEven(3));
        assertTrue(NumberUtils.isEven(0));
        assertFalse(NumberUtils.isEven(-1));
    }
}

위 테스트는 isEven 메서드에 대한 테스트를 작성한 것입니다. 리팩토링을 수행하기 전에 이 테스트를 실행하여 현재 코드가 제대로 동작하는지 확인할 수 있습니다.

테스트를 실행하고 모두 통과하면, 이제 코드를 리팩토링할 준비가 되었습니다. 예를 들어, 메서드 내부의 조건식을 변경하여 성능을 개선할 수 있습니다.

public class NumberUtils {
    public static boolean isEven(int number){
        return (number & 1) == 0;
    }
}

위와 같이 코드를 수정한 후, 다시 테스트를 실행하고 모두 통과하는지 확인합니다. 리팩토링이 성공적으로 이루어졌다면 개선된 코드를 사용하여 작업을 계속할 수 있습니다.

결론

JUnit을 이용하여 코드를 리팩토링할 때는 기능이 변경되지 않도록 테스트를 작성하고 실행하는 것이 매우 중요합니다. 이를 통해 리팩토링한 코드가 제대로 동작하는지 확인할 수 있고, 유지보수성이 높은 코드를 개발할 수 있습니다.