Java에서 if-else 문을 enum으로 대체하는 깔끔한 접근 방식

if-else 문은 Java 프로그래밍에서 흔히 사용되는 제어 구조입니다.
그러나 복잡한 조건 로직을 다룰 때 코드가 지저분해지고 유지보수가 어려워질 수 있습니다.
이 글에서는 enum을 사용하여 if-else 문을 대체하는 더 깔끔하고 유지보수가 쉬운 접근 방식을 살펴보겠습니다

1. 문제 : 복잡한 if-else 문

다음과 같은 코드를 살펴 봅시다.

public class PaymentProcessor {
    public void processPayment(String paymentMethod, double amount) {
        if (paymentMethod.equals("CREDIT_CARD")) {
            System.out.println("신용카드로 " + amount + " 결제 처리");
        } else if (paymentMethod.equals("DEBIT_CARD")) {
            System.out.println("직불카드로 " + amount + " 결제 처리");
        } else if (paymentMethod.equals("PAYPAL")) {
            System.out.println("PayPal로 " + amount + " 결제 처리");
        } else {
            System.out.println("알 수 없는 결제 방식");
        }
    }
}

 

이 코드에는 몇 가지 문제가 있습니다:

  1. 새로운 결제 방식을 추가할 때마다 if-else 문을 수정해야 합니다.
  2. 문자열 비교는 오타의 위험이 있습니다.
  3. 코드가 길어지면 가독성이 떨어집니다.

 

2. 해결책 : enum  사용하기

이제 enum을 사용하여 이 코드를 개선해 보겠습니다.

public enum PaymentMethod {
    CREDIT_CARD {
        @Override
        public void processPayment(double amount) {
            System.out.println("신용카드로 " + amount + " 결제 처리");
        }
    },
    DEBIT_CARD {
        @Override
        public void processPayment(double amount) {
            System.out.println("직불카드로 " + amount + " 결제 처리");
        }
    },
    PAYPAL {
        @Override
        public void processPayment(double amount) {
            System.out.println("PayPal로 " + amount + " 결제 처리");
        }
    };

    public abstract void processPayment(double amount);
}

public class PaymentProcessor {
    public void processPayment(PaymentMethod paymentMethod, double amount) {
        paymentMethod.processPayment(amount);
    }
}

 

 

3. 장점

  • 코드 구조 개선: 각 결제 방식의 로직이 해당 enum 상수 내에 캡슐화되어 있습니다.
  • 타입 안전성: 문자열 대신 enum을 사용하므로 컴파일 시점에 오류를 잡을 수 있습니다.
  • 확장성: 새로운 결제 방식을 추가하려면 enum에 새 상수를 추가하기만 하면 됩니다.
  • 가독성: 코드가 더 깔끔하고 의도가 명확해집니다.
  • 유지보수성: 각 결제 방식의 로직을 독립적으로 수정할 수 있습니다.