Projects/Java [Personal]

[Java] 문자열을 Enum으로 변환하는 메서드를 static으로 작성해야 하는 이유

montmer27 2025. 12. 10. 22:10

배경

아래 코드에서 fromSymbol이라는 Enum의 메서드가 왜 static으로 선언되기전, 컴파일 에러가 발생

 

(보충설명)

fromSymbol의 목적은 문자열("+", "-", "*", "/")을 받아 Enum 상수 중 하나(Operator.ADD 등)를 반환하는 것

// 문자열을 Enum으로 변환
    public static Operator fromSymbol(String symbol) {
        for (Operator op : values()) {
            if (op.getSymbol().equals(symbol)) {
                return op;
            }
        }
        throw new IllegalArgumentException("잘못된 연산자입니다: " + symbol);
    }
}

 

enum이란?

미리 정의된 상수들의 특별한 집합

 

enum의 특성

- 추가적인 객체 생성 없이 외부에서 사용 가능 (enum 내부 메소드와 별개)

- public static final : 대문자로 적는 것이 원칙

- 열거시에는 콤마(,)로, 끝날 시에는 세미콜론(;)으로 마무리한다.

- 다른 클래스처럼 생성자를 만들 수 있음

- .values() 메소드를 통해 내부의 각 상수들을 배열의 형태로 가져올 수 있음

 

 

이유

  1. Enum 인스턴스와 무관한 기능이기 때문
  2. Enum 타입은 직접 인스턴스를 만들 수 없음
  3. 문자열 → Enum 변환 로직은 전체 Enum에 대한 정적 팩토리 역할
  4. 편의성과 가독성

정리

fromSymbol()을 static으로 선언하는 이유:

  1. 인스턴스 상태와 무관한, Enum 전체에 대한 기능이기 때문
  2. Enum은 임의 인스턴스 생성 불가 → 인스턴스 메서드로 설계하면 논리적 모순
  3. 문자열을 Enum 값으로 변환하는 정적 팩토리 메서드의 역할
  4. 사용성과 가독성 측면에서도 static이 자연스럽고 바람직함