TIL

Java Enum 활용하기 - 계산기 과제로 이해하는 Enum

chungmani 2026. 7. 24. 21:56

계산기 과제를 복습하면서 사칙연산 기호를 관리하기 위해 Enum을 사용해보았다.

처음에는 단순히 +, -, *, /를 switch문에서 직접 비교했지만, 도전 과제에서는 Enum을 활용하여 연산자 정보를 하나의 타입으로 관리해보았다.

이번 글에서는 계산기 과제에서 사용한 코드를 기준으로 Java의 Enum을 어떻게 활용할 수 있는지 정리해보자.


1. Enum이란?

Enum은 서로 관련된 상수들을 하나의 타입으로 묶어서 관리할 수 있도록 해주는 문법이다.

이 값들은 프로그램이 실행되는 동안 갑자기 다른 연산자로 변경될 필요가 없다.

이처럼 정해진 값들을 하나의 그룹으로 관리하고 싶을 때 Enum을 사용할 수 있다.

 

계산기 과제에서는 OperatorType이라는 Enum을 만들었다.

public enum OperatorType {
    SUM('+'),
    SUB('-'),
    MUL('*'),
    DIV('/');

    private char op;

    private OperatorType(char op) {
        this.op = op;
    }

    public char getOp() {
        return op;
    }
}

 


2. Enum 상수에 인자값을 넣을 수 있다

Enum도 일반적인 클래스처럼 필드와 생성자를 가질 수 있다.

예를 들어 다음 코드에서:

SUM('+')

'+'는 SUM이라는 Enum 상수에 전달되는 값이다.

그리고 Enum 내부의 생성자가 이 값을 받는다.

private OperatorType(char op) {
    this.op = op;
}

결국 다음과 같은 흐름이다.

SUM('+')
    ↓
생성자 호출
    ↓
OperatorType(char op)
    ↓
this.op = '+'

따라서 SUM이라는 Enum 상수는 내부적으로 +라는 연산 기호 정보를 가지고 있게 된다.

다른 값들도 동일하다.

SUM('+') → '+'
SUB('-') → '-'
MUL('*') → '*'
DIV('/') → '/'

이렇게 하면 연산자에 대한 정보를 Enum 안에서 함께 관리할 수 있다.

 


3. Enum의 필드 값을 가져오기

Enum 내부에 저장한 op 값을 가져오기 위해 Getter 메서드를 만들었다.

public char getOp() {
    return op;
}

예를 들어 SUM의 연산 기호를 가져오고 싶다면 다음과 같이 사용할 수 있다.

OperatorType.SUM.getOp(); // '+'를 반환한다.

 


4. Enum의 모든 값을 배열로 가져오기 - values()

계산기에서는 사용자가 입력한 연산 기호와 Enum에 저장된 연산 기호를 비교해야 했다.

이때 사용한 것이 바로 values() 메서드이다.

OperatorType[] op = OperatorType.values();

 

values()는 해당 Enum에 선언된 모든 Enum 상수를 배열로 반환한다.

[SUM, SUB, MUL, DIV]

 


5. 향상된 for문으로 Enum의 모든 값 확인하기

이제 values()로 가져온 Enum 배열을 반복문으로 확인할 수 있다.

OperatorType[] op = OperatorType.values();

for (OperatorType operatorType : op) {

}

이 코드는 배열의 값을 하나씩 꺼내서 operatorType에 넣는다.

예를 들어 반복문이 실행되면서 다음과 같이 동작한다고 생각할 수 있다.


 

6. 사용자 입력값과 Enum의 값을 비교하기

계산기에서는 사용자가 연산 기호를 입력한다.

+

사용자가 입력한 값은 char 타입의 cal 변수에 저장된다.

char cal = sc.nextLine().charAt(0);

이제 이 입력값이 어떤 연산자인지 Enum을 통해 찾아야 한다.

이를 위해 values()로 모든 Enum 값을 가져오고 반복문을 사용했다.

OperatorType[] op = OperatorType.values();
OperatorType matchedOp = null;

for (OperatorType operatorType : op) {
    if (cal == operatorType.getOp()) {
        matchedOp = operatorType;
    }
}

 

 


7. 찾은 Enum을 switch문에서 활용하기

연산자를 찾은 후에는 matchedOp를 switch문의 조건으로 사용할 수 있다.

switch (matchedOp) {
    case SUM -> result = num1 + num2;

    case SUB -> result = num1 - num2;

    case MUL -> result = num1 * num2;

    case DIV -> {
        if (num2 == 0) {
            System.out.println("나눗셈 연산에서 분모는 0이 올 수 없습니다.");
            return 0;
        }

        result = num1 / num2;
    }
}

 

여기서 중요한 점은 이제 +, -, *, /를 직접 비교하지 않는다는 것이다.

대신 Enum의 상수 자체를 기준으로 분기한다.