JAVA

JAVA - Enum

윤승 2025. 3. 5. 20:01
Enum이란?
enum(열거형, enumeration)은 서로 연관된 상수들의 집합을 정의하는 특수한 데이터 타입
즉, 특정 값들만 가질 수 있도록 제한된 상수들의 묶음

 

Enum을 사용했을 때 장점

  1. 한정된 값만 가질 수 있음 enum에 정의된 값 외에는 가질 수 없음.
  2. 코드의 가독성과 안정성이 향상됨잘못된 값을 넣는 실수를 방지.
  3. 객체처럼 동작필드, 메서드, 생성자를 가질 수 있음.
  4. switch-case 문에서 유용하게 사용코드 가독성 증가.
  5. 수정 시 변경 범위가 최소화된다.  ☞  enum만 수정하면 됨

 

 

Enum 구현

 

계산기 과제를 하면서 enum이 어떻게 쓰이는지 이해하게 되었다.

아래에 보이는 코드처럼 char타입 연산자를 주면서 비교했다면, 입력할 때 " +",  " / " 같은 공백이 있는 작은 실수로도 오류가 발생했다.

public double calculate(double a, double b, String operator) {
    if (operator.equals("+")) {
        return a + b;
    } else if (operator.equals("-")) {
        return a - b;
    } else if (operator.equals("*")) {
        return a * b;
    } else if (operator.equals("/")) {
        return a / b;
    } else if (operator.equals("%")) {
        return a % b;
    } else {
        throw new IllegalArgumentException("알 수 없는 연산자: " + operator);
    }
}

 

 

이를 해결하기 위해 enum 클래스를 만들었다.

OperatorType이라는 enum을 선언하고, 사칙연산 연산자들을 상수 값으로 정의했다.

(열거 상수는 대문자로 작성!!)

연산자를 나타내는 문자(+, -, *, /, %)를 symbol 이라는 필드를 선언했다.

package calculator;
// 연산자 타입 enum
// 연산자를 나타내는 enum 클래스
public enum OperatorType {
    ADD('+'),
    SUBTRACT('-'),
    MULTIPLY('*'),
    DIVIDE('/'),
    MOD('%');

    // symbol: 각 연산자를 나타내는 문자(+, -, *, /, %)를 저장하는 변수
    private final char symbol;

    //생성자는 각 OperatorType 항목에 심볼을 할당(예: OperatorType.ADD는 심볼 '+')
    OperatorType(char symbol) {
        this.symbol = symbol;
    }

    // 연산자 심볼을 반환하는 메소드
    public char getSymbol() {
        return symbol;
    }

    // 주어진 문자(symbol)에 해당하는 OperatorType을 반환하는 메소드
    // 연산자가 '+'이면 OperatorType.ADD를 반환하고, 잘못된 연산자이면 예외 발생
    public static OperatorType fromSymbol(char symbol) {
        for (OperatorType type : calculator.OperatorType.values()) {
            if (type.getSymbol() == symbol) {
                return type;
            }
        }
        throw new IllegalArgumentException("알 수 없는 연산자: " + symbol);
    }
}

 

▼실행결과

 

 

실행장면과 같이 기호를 입력할 때 공백이 있어도 오류 없이 컴파일할 수 있는 것을 알 수 있다.


'JAVA' 카테고리의 다른 글

JAVA - Optional  (0) 2025.03.06
JAVA 계산기 트러블 슈팅  (3) 2025.03.05
JAVA - 제네릭(Generic)  (1) 2025.03.04
JAVA로 간단한 계산기 구현 2  (0) 2025.02.28
JAVA 클래스와 객체  (0) 2025.02.27