Enum이란?
enum(열거형, enumeration)은 서로 연관된 상수들의 집합을 정의하는 특수한 데이터 타입
즉, 특정 값들만 가질 수 있도록 제한된 상수들의 묶음
Enum을 사용했을 때 장점
- 한정된 값만 가질 수 있음 ☞ enum에 정의된 값 외에는 가질 수 없음.
- 코드의 가독성과 안정성이 향상됨 ☞ 잘못된 값을 넣는 실수를 방지.
- 객체처럼 동작 ☞ 필드, 메서드, 생성자를 가질 수 있음.
- switch-case 문에서 유용하게 사용 ☞ 코드 가독성 증가.
- 수정 시 변경 범위가 최소화된다. ☞ 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 |