241015 TIL - Java 스터디 3 Enum

J_log·2024년 10월 15일
0

Java 스터디 정리

목록 보기
3/5
post-custom-banner

Enum

enum(열거형)은 자바에서 상수들의 집합을 정의할 때 사용되는 특별한 자료형이다. 일정한 값들로 미리 정의해 놓고, 이를 통해 가독성과 코드 안정성을 높일 수 있다. 주로 제한된 선택지들 (요일, 상태 등) 을 처리할 때 유용하다.

Enum 정의

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

사용 방법

enum은 클래스와 유사하며 그 안에 메서드와 필드를 정의할 수도 있다.

public class EnumExample {
    public static void main(String[] args) {
        Day day = Day.MONDAY;
        
        if (day == Day.MONDAY) {
            System.out.println("It's Monday!");
        }
    }
}
public class EnumSwitchExample {
    public static void main(String[] args) {
        Day day = Day.FRIDAY;
        
        switch (day) {
            case MONDAY:
                System.out.println("Start of the work week.");
                break;
            case FRIDAY:
                System.out.println("It's almost the weekend!");
                break;
            case SUNDAY:
                System.out.println("Rest day.");
                break;
            default:
                System.out.println("Another regular day.");
        }
    }
}

필드와 메서드 추가

enum은 단순한 상수의 집합일 뿐만 아니라 필드와 메서드를 추가하여 더 복잡한 데이터를 다룰 수 있다.

public enum Planet {
    MERCURY(3.303e+23, 2.4397e6),
    VENUS(4.869e+24, 6.0518e6),
    EARTH(5.976e+24, 6.37814e6);

    private final double mass;   // in kilograms
    private final double radius; // in meters

    // 생성자
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    public double getMass() {
        return mass;
    }

    public double getRadius() {
        return radius;
    }
    
    public double surfaceGravity() {
        final double G = 6.67300E-11; // gravitational constant
        return G * mass / (radius * radius);
    }
}

Enum의 메서드

  • values() : 열거형에 정의된 모든 상수를 배열로 반환
  • valueOf(String name) : 문자열을 입력받아서 일치하는 열거 객체를 리턴
  • ordinal() : 해당 열거형 상수의 순서(인덱스)를 반환
  • name() : 열거형 상수의 이름을 문자열로 반환
  • compareTo() : 열거 객체를 비교해서 순번 차이를 리턴

Enum의 이점

이번에 계산기 프로젝트를 만들면서 사칙연산 연산자를 enum으로 정의해서 로직을 바꿔보았다.
계산기를 구현하는데 다양한 방법이 있겠지만 enum을 사용하면서 생각해본 몇 가지 좋은 점을 적어보려고 한다.

  • 사전에 정의된 값들만 사용할 수 있다. 계산기에서는 +, -, *, /와 같은 연산자만 허용되며 그 외의 값은 허용되지 않도록 강제할 수 있다.
    이렇게 하면 잘못된 연산자가 들어오는 경우를 방지할 수 있고 코드에서 직접 문자열로 연산자를 비교하는 대신 enum으로 안전하게 관리할 수 있다.

  • 연산자를 문자열로 비교하면 오타나 잘못된 값이 들어오는 것을 컴파일러가 잡아내지 못하지만 enum은 타입이 강제되므로 잘못된 연산자가 사용될 가능성을 줄일 수 있다.

  • 연산자와 관련된 동작을 enum안에 메서드로 정의해 코드를 읽을 때 연산자 별로 어떤 동작을 수행하는지 명확해 진다.

  • 나중에 새로운 연산자나 기능을 추가해야 한다면 enum에 새로운 연산자를 추가하고 해당 연산에 대한 동작을 쉽게 확장할 수 있다.그리고 로직을 한 곳에 묶음으로써 연산과 관련된 로직을 다른 곳에서 일일이 처리 할 필요가 없고 enum안에서 해결 할 수 있다.

post-custom-banner

0개의 댓글