[Java]Enum이란? & 사용법

2025. 2. 28. 13:52·Java

✅ Enum이란?

코딩을 작성할때 우리는 대부분 이런식으로 상수를 정의한다.

final static int A = 0;
String B = "abc";

 

이렇게 정의를 하다보면 다양한 문제가 발생한다.

그래서 자바 1.5버전부터 새로 추가된 클래스는 " Enum " 이다.

enumerated type 의 줄임말로 열거형이라고 불리는데 명명된 값들의 집합을 이루는 자료형이다.

 

ex)

boolean -> (true,false)

 

예를 들면 boolean도 열거형 데이터 타입이다.

이렇듯 사용자가 직접 Enum 클래스를 활용해 열거형 데이터 타입을 정의 할 수 있다.

 

 

✅ Enum의 장점

1. 리팩토링(유지보수)를 할 때 변경 범위가 최소화된다. 즉,내용을 추가할때 Enum 코드만 수정해도 될 때가 많다.

2. 인스턴스 생성과 상속을 방지하여 상수값의 타입안정성이 보장된다.

3. 코드의 가독성이 향상된다.

4. 일반 클래스와 마찬가지고 메서드를 가질 수 있다. 이를 통해 열거형 값에 의한 동작을 정의하고, 상태에 따라 다르게 동 작 시킬 수 있다.

 

 

✅ Enum 메소드

Static
Methods
valueOf(String arg)  String 값을 enum에서 가져옴. 값이 없으면 예외 발생 
valueOf(Class<T> class, String arg)   넘겨받은 class에서 String찾아, enum에 가져옴. 
 valueOf(String arg)는 내부적으로 자기자신 Class를 가져옴.
 values()  eum의 요소들을 순서대로 enum타입의 배열로 리턴. 

 

 

✅ Enum 사용법

기본적으로 가장 많이 사용하는 valueOf(String arg)를 이용한 예제를 알아보자.

package calculate;

//연산자의 종류를 정의하는 열거형 클레스
public enum OperatorType {
    ADD("+"),
    SUBTRACT("-"),
    MULTIPLY("*"),
    DIVIDE("/");

    private final String symbol; //입력받을 연산자 기호
    private final Calculate calculate = new Calculate();

    //생성자:연산자 기호 설정
    OperatorType(String symbol) {
        this.symbol = symbol;
    }

    //연산자의 기호를 반환하는 게터
    public String getSymbol() {
        return symbol;
    }

    //입력받은 기호와 동일한 연산자 타입을 찾는 메서드
    public static OperatorType matchOperatorType(char symbol) {
        for (OperatorType operatorType : OperatorType.values()) { //모든 Enum값 순환
            if (operatorType.getSymbol().charAt(0) == symbol) {   //일치하는지 확인
                return operatorType;
            }
        }
        throw new IllegalArgumentException("유효하지 않은 연산자입니다: " + symbol);
    }

    //첫번째 숫자와 두번쨰숫자의 연산을 수행하는 메서드
    public int operate(int firstNumber, int secondNumber) {
        if(ADD.getSymbol().equals(symbol)) {
            return calculate.Add(firstNumber,secondNumber);
        }
        if(SUBTRACT.getSymbol().equals(symbol)) {
            return calculate.Sub(firstNumber,secondNumber);
        }
        if(MULTIPLY.getSymbol().equals(symbol)) {
            return calculate.Mul(firstNumber,secondNumber);
        }
        if(DIVIDE.getSymbol().equals(symbol)) {
            return calculate.Div(firstNumber,secondNumber);
        }
        throw new IllegalArgumentException("유효하지 않은 연산자입니다: " + symbol);
    }



}

 

 

1.Enum 정의 

4가지의 연산자를 문자열 기호를 심볼로 사용하여 정의했다.

//연산자의 종류를 정의하는 열거형 클레스
public enum OperatorType {
    ADD("+"),
    SUBTRACT("-"),
    MULTIPLY("*"),
    DIVIDE("/");

 

2.필드 정의

입력받는 메인 클래스에서 값을 가져와 저장할 symbol 과 연산클래스들을 가져 올 클래스 객체를 생성한다.

    private final String symbol; //입력받을 연산자 기호
    private final Calculate calculate = new Calculate();

 

3.생성자와 Getter 메소드 

Enum의 인스턴스를 생성하기 위한 생성자 호출과 symbol을 반환하는 Getter 를 작성한다.즉,해당 Symbol을 외부에서 접근할 수 있도록 하는 메소드이다.

//생성자:연산자 기호 설정
    OperatorType(String symbol) {
        this.symbol = symbol;
    }

//연산자의 기호를 반환하는 게터
    public String getSymbol() {
        return symbol;
    }

 

4.입력한 연산자와 동일한 Enum심볼을 비교하는 메소드

 values 문법을 이용해 OperatorType 의 enum 모든 값을 순회하고 입력한 symbol 과 동일한 값을 return 한다.

//입력받은 기호와 동일한 연산자 타입을 찾는 메서드
    public static OperatorType matchOperatorType(char symbol) {
        for (OperatorType operatorType : OperatorType.values()) { //모든 Enum값 순환
            if (operatorType.getSymbol().charAt(0) == symbol) {   //일치하는지 확인
                return operatorType;
            }
        }
        throw new IllegalArgumentException("유효하지 않은 연산자입니다: " + symbol);
    }

 

 

5. 현재 연산자에 따라 두 숫자를 사칙연산하는 메소드

연사자별 심볼을 가져와서 입력한 심볼과 비교하여 계산클래스의 연산메소드를 불러온다.

//첫번째 숫자와 두번쨰숫자의 연산을 수행하는 메서드
    public int operate(int firstNumber, int secondNumber) {
        if(ADD.getSymbol().equals(symbol)) {
            return calculate.Add(firstNumber,secondNumber);
        }
        if(SUBTRACT.getSymbol().equals(symbol)) {
            return calculate.Sub(firstNumber,secondNumber);
        }
        if(MULTIPLY.getSymbol().equals(symbol)) {
            return calculate.Mul(firstNumber,secondNumber);
        }
        if(DIVIDE.getSymbol().equals(symbol)) {
            return calculate.Div(firstNumber,secondNumber);
        }
        throw new IllegalArgumentException("유효하지 않은 연산자입니다: " + symbol);
    }

 

 

 

Enum을 전체적인 프로젝트에 어떻게 적용하는지 보고 싶다면 

https://computerreport.tistory.com/46

 

[Java]Lv3 계산기 만들기

https://computerreport.tistory.com/45 [Java]Lv2 계산기 만들기https://computerreport.tistory.com/44 [Java]Lv1 계산기 만들기문제1. 양의 정수(0포함)를 입력받기 2. 사칙연산기호(+,-,*,/)를 입력 받기 3. 위에서 입력받

computerreport.tistory.com

해당 링크를 통해 Lv1,2,3를 차근차근 보면 된다.

 

프로젝트를 진행하면서 Enum의 장점을 잘 활용한다면 코드의 간소화와 가독성을 높이고 팀협업을 더 수월하게 할 수 있을 것이다.

간단한 코드라도 직접 적용해보고 익숙하게 만드는 것이 관건이다.

 

감사합니다

 

 

 

 

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

[Java]문자열을 배열로 변환하는 방법  (0) 2025.03.06
[Java]valueOf()를 이용한 형변환  (0) 2025.03.04
[Java]코드 스타일 및 명명 규칙  (0) 2025.02.24
[Java]난수 생성(math,Random)  (0) 2025.02.14
[Java]ArrayList  (0) 2025.02.11
'Java' 카테고리의 다른 글
  • [Java]문자열을 배열로 변환하는 방법
  • [Java]valueOf()를 이용한 형변환
  • [Java]코드 스타일 및 명명 규칙
  • [Java]난수 생성(math,Random)
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (152)
      • JavaScript (8)
      • SQL (11)
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (30)
        • 트러블슈팅 (10)
        • 프로젝트 회고 (18)
      • git,Github (2)
      • TIL (38)
      • Spring (20)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스파르타 코딩 #부트캠프 #첫ot
    java #arraylist #list #배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[Java]Enum이란? & 사용법
상단으로

티스토리툴바