반응형

오늘은 심심해서 애들도 가르킬겸 용어정리에 대해서 고민하는 시간을 가졌다.

자바의 리팩토링(refactoring) 용어에 대해서 이해하고 샘플 코드를 통해 좀 더 자세히 알아 보도록 하자.


자바에서 리팩토링이란? (사전적 의미)

리팩토링은 SW의 구조 또는 로직을 변경하여 기존 코드 대비 더 이해하기 쉽고 유지보수하기 편리하게 만드는 행위를 말합니다.

즉, 새로 만드는 신규 코드에 대해서는 해당 용어가 적합하지 않고 유지보수 또는 고도화 프로젝트에서 기존에 짜여진 코드를 수정할 때 보다 더 깔끔하게 만드는 것을 리팩토링이라고 한다.

그럼 리팩토링을 왜 할까?
(개인적인 생각)

1) 코드가 매우 더티할 경우 : 가독성이 너무 낮아서 겨우 이해했어도 다음번호 또 봐도 이해 안갈때 깔끔하게 만든다.

2) 불필요하게 너무 길 경우 : 라인을 줄여서 가독성을 높이는게 좋은데 OOP 관점으로 짜지 않고 C처럼 짰을때 이다.

3) 좋은 메소드가 나왔을 경우 : JDK가 버전 업되면서 Deprecated 되거나 기존의 로직을 대체할 수 있는 메소드가 나온 경우

4) 업무 확장을 위해 재사용 할 경우 : 기존에 특정 프로세스에 국한되어 쓰던 로직이 재사용이 빈번하게 이루어 져야 하는 경우 분리작업을 할 수 있음.

자 그럼 예제를 한번 들어서 확인 해볼까?? 

public class Calculator {
    public int add(int num1, int num2) {
        return num1 + num2;
    }

    public int subtract(int num1, int num2) {
        return num1 - num2;
    }

    public int multiply(int num1, int num2) {
        return num1 * num2;
    }

    public int divide(int num1, int num2) {
        if (num2 != 0) {
            return num1 / num2;
        } else {
            System.out.println("Cannot divide by zero!");
            return 0;
        }
    }
}

위 코드를 보자.  divide 메소드에서 num2 변수가 0인지 아닌지 비교하는것은 로직으로는 크게 문제 없다. 근데 좀 더티할 뿐만 아니라 저렇게 비교하는 로직이 다른 기능에도 많다고 가정 한다면?? 

public class Calculator {
    public int add(int num1, int num2) {
        return num1 + num2;
    }

    public int subtract(int num1, int num2) {
        return num1 - num2;
    }

    public int multiply(int num1, int num2) {
        return num1 * num2;
    }

    public int divide(int num1, int num2) {
        if (isNotZero(num2)) {
            return num1 / num2;
        } else {
            handleDivideByZero();
            return 0;
        }
    }

    private boolean isNotZero(int num) {
        return num != 0;
    }

    private void handleDivideByZero() {
        System.out.println("Cannot divide by zero!");
    }
}

위 처럼 isNotZero와 hadleDivideByZero 메소드를 구현해서 재사용 가능하게끔 하는 것이다.

대략 이해 가셨나용?

리팩토링은 정답이 없습니다. 단지... 리팩토링을 하는 대상의 실력이 정답입니다.

 

끝~

반응형

+ Recent posts