오늘은 심심해서 애들도 가르킬겸 용어정리에 대해서 고민하는 시간을 가졌다.
자바의 리팩토링(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 메소드를 구현해서 재사용 가능하게끔 하는 것이다.
대략 이해 가셨나용?
리팩토링은 정답이 없습니다. 단지... 리팩토링을 하는 대상의 실력이 정답입니다.
끝~
'Program > JAVA' 카테고리의 다른 글
오라클 Java License 유료 or 무료 확실히 알아보자. (0) | 2023.02.21 |
---|---|
The install4j wizard could not find a Java (TM) Runtime Environment 에러 원인 해결 (0) | 2023.02.21 |
Spring Multi Resolver 구현 (0) | 2013.10.20 |
ShellScript를 이용한 jar파일만들기 (0) | 2012.08.09 |
JAVA에서 윈도우 명령어 실행하기 (0) | 2012.06.14 |