리팩토링
코드를 재구성하여 코드의 구조를 개선하고 유지보수를 쉽게 하기 위한 작업이다.
결과의 변함이 없이 코드를 재구성한 것으로 주로 가독성을 높이고 유지보수를 편하게 한다.
버그를 없애거나 새로운 기능을 추가하는 행위는 ㄹ아니다.
- 메서드 추출 (Extract Method): 긴 메서드를 작은 단위의 메서드로 분리하여 코드 가독성을 높입니다.
- 클래스 추출 (Extract Class): 큰 클래스를 작은 클래스로 분리하여 각 클래스가 단일 책임을 가지도록 합니다.
- 메서드 옮기기 (Move Method): 메서드가 더 잘 어울리는 다른 클래스로 이동하여 관련성을 높입니다.
- 필드 옮기기 (Move Field): 필드가 더 잘 어울리는 클래스로 이동하여 응집도를 높입니다.
- 인터페이스 추출 (Extract Interface): 여러 클래스에서 공통으로 사용하는 메서드를 인터페이스로 추출하여 유연성을 높입니다.
- 조건문 분해 (Decompose Conditional): 복잡한 조건문을 작은 조각으로 분해하여 가독성을 높입니다.
- 반복문 쪼개기 (Extract Loop): 반복문을 여러 개의 메서드로 분해하여 코드 중복을 줄입니다.
- 매직 넘버를 상수로 치환 (Replace Magic Number with Symbolic Constant): 의미있는 이름을 가진 상수로 매직 넘버를 대체하여 코드 이해를 돕습니다.
- 중복 코드 제거 (Remove Duplicate Code): 중복된 코드를 하나의 메서드나 클래스로 추출하여 유지보수성을 높입니다.
리팩토링을 통해 코드의 가독성, 유지보수성, 재사용성을 개선할 수 있으며, 자바에서는 이를 지원하는 다양한 도구들도 있어 보다 효율적으로 리팩토링을 수행할 수 있다.
public class Primenumbers {
int num = 100;
public static void main(String[] args) {
Primenumber pn = new Primenumber();
int total_count = 0;
for (int i = 1; i <= pn.num; i++) {
int count = 0; // 카운트 초기화
for (int j = 1; j < i; j++) { // j를 현재 i의 숫자까지
total_count++;
if (i % j == 0) { // i를 j로 나눠서 나머지 값이 0이면 카운트 증가
count++;
}
}
if (count == 1) {
// System.out.println(i);
System.out.printf("%d \n", i);
}
}
System.out.printf("total_count : %d \n", total_count);
}
}
해당 코드는 무려 4천번이나 넘게 for 문이 가동된다.
아래는 리팩토링으로 구동횟수를 212번으로 감소시킨 코드이다.
public class PrimeNumbers {
public static void main(String[] args) {
int limit = 100;
boolean[] isPrime = new boolean[limit + 1];
int total_count = 0;
// Initialize all numbers as prime
for (int i = 2; i <= limit; i++) {
total_count++;
isPrime[i] = true;
}
// Implement Sieve of Eratosthenes
for (int factor = 2; factor * factor <= limit; factor++) {
total_count++;
if (isPrime[factor]) {
for (int j = factor * factor; j <= limit; j += factor) {
total_count++;
isPrime[j] = false;
}
}
}
System.out.printf("\n Total Count:%d ", total_count);
// Print all prime numbers
System.out.println("\nPrime numbers between 1 and 100:");
for (int i = 2; i <= limit; i++) {
if (isPrime[i]) {
System.out.print(i + " ");
}
}
}
}
'자바 튜토리얼' 카테고리의 다른 글
제너릭 (Generics) [1] (0) | 2024.07.16 |
---|---|
인터페이스와 상속 (Interface and Inheritance) [2] (0) | 2024.07.12 |
인터페이스와 상속 (Interface and Inheritance) [1] (0) | 2024.07.08 |
인터페이스 (Interface) (0) | 2024.07.08 |
클래스와 객체 (Classes and Objects) [4] (0) | 2024.07.05 |