[Java] Enum μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

2025. 5. 5. 15:39Β·β˜•Java/πŸ“Java Programming

βœ… 1. Enum μ΄λž€?

  • μ„œλ‘œ κ΄€λ ¨ μžˆλŠ” μƒμˆ˜λ“€μ„ ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ λ¬Άμ–΄μ„œ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” νŠΉλ³„ν•œ ν΄λž˜μŠ€μ΄λ‹€.
  • μ‰½κ²Œλ§ν•΄, ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— μ—¬λŸ¬ μƒμˆ˜λ“€μ„ μ •μ˜ν•˜κ³  ν•΄λ‹Ή 클래슀λ₯Ό 톡해 μƒμˆ˜λ₯Ό μ΄μš©ν•˜κ²Œ λ˜λŠ” 방식이닀.
  • Enum은 Java 5 (JDK 1.5)에 처음 λ„μž…λœ κΈ°λŠ₯이닀.

βœ… 2. μƒμˆ˜λž€?

  • μƒμˆ˜(Constant)λž€ ν•œλ²ˆ μ •ν•΄μ§€λ©΄ λ³€κ²½ν•  수 μ—†λŠ” 값을 μ˜λ―Έν•œλ‹€.
  • μžλ°”μ—μ„œ μƒμˆ˜λŠ” 데이터 ν•„λ“œλΆ€μ— μ •μ˜λ₯Ό ν•˜λ©°, 보톡 staticν‚€μ›Œλ“œμ™€ finalν‚€μ›Œλ“œλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•œ 데이터λ₯Ό μƒμˆ˜λ‘œ λ³Έλ‹€.
public class Constants {
    public static final int MAX_USERS = 100;
}

βœ… 3. Enum μ‚¬μš©λ²•

  • λŒ€ν‘œμ μΈ μ‚¬μš©λ²•μ€ class ν‚€μ›Œλ“œ 뢀뢄에 enum ν‚€μ›Œλ“œλ₯Ό λΆ™νžˆλ©΄ enum ν΄λž˜μŠ€κ°€ λ§Œλ“€μ–΄μ§„λ‹€.
  • enum에 μƒμˆ˜λͺ…을 적으면, μƒμˆ˜κ°’μ΄ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄ μ§„λ‹€. μƒμˆ˜λ₯Ό 쉽고 νŽΈν•˜κ²Œ 늘리고 쀄일 수 있음.

 

public enum Direction {
    NORTH, 
    SOUTH, 
    EAST, 
    WEST;
}

 


βœ… 4. java.lang.Enum 좔상 클래슀

  • μžλ°”μ—λŠ” "Enum" μ΄λΌλŠ” 클래슀λͺ…을 κ°€μ§„ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•œλ‹€.
  • ν•΄λ‹Ή Enum ν΄λž˜μŠ€λŠ” enum ν‚€μ›Œλ“œλ‘œ λ§Œλ“€μ–΄μ§„ ν΄λž˜μŠ€λ“€μ΄ μžλ™μœΌλ‘œ 상속을 λ°›κ²Œ 되며, μ˜€λ²„λΌμ΄λ”©μ„ 톡해 이용이 λœλ‹€.
public abstract class Enum<E extends Enum<E>>
        implements Constable, Comparable<E>, Serializable {

    private final String name;

    public final String name() {
        return name;
    }

    private final int ordinal;

    public final int ordinal() {
        return ordinal;
    }

    protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }

    public String toString() {
        return name;
    }

βœ… 5. Enum λ‚΄λΆ€ λ™μž‘ 원리

  • enum은 λ‚΄λΆ€μ μœΌλ‘œ μ»΄νŒŒμΌλŸ¬κ°€ 컴파일 μ‹œμ μ— ν˜•νƒœλ₯Ό λ°”κΏ”μ€€λ‹€.

(1) 컴파일 μ „

public enum Direction {
    NORTH, 
    SOUTH, 
    EAST, 
    WEST;
}

 

(2) 컴파일 ν›„

public final class Direction extends Enum<Direction> {

    public static final Direction NORTH = new Direction("NORTH", 0);
    public static final Direction SOUTH = new Direction("SOUTH", 1);
    public static final Direction EAST  = new Direction("EAST", 2);
    public static final Direction WEST  = new Direction("WEST", 3);

    private static final Direction[] VALUES = { NORTH, SOUTH, EAST, WEST };

    private Direction(String name, int ordinal) {
        super(name, ordinal); // Enum 클래슀의 μƒμ„±μž 호좜
    }

    @Override
    public static Direction[] values() {
        return VALUES.clone();
    }

    @Override
    public static Direction valueOf(String name) {
        for (Direction d : VALUES) {
            if (d.name().equals(name)) return d;
        }
        throw new IllegalArgumentException("No enum constant " + name);
    }
}
  • enum ν‚€μ›Œλ“œκ°€ class ν‚€μ›Œλ“œλ‘œ λ³€κ²½λ˜λ©΄μ„œ, ν΄λž˜μŠ€κ°€ λœλ‹€.
  • Enum 클래슀λ₯Ό μƒμ†λ°›λŠ” ꡬ쑰가 λœλ‹€.
  • 핡심은 enum을 λ§Œλ“€ λ•Œ μ‚¬μš©ν•œ μƒμˆ˜λͺ…이 μžλ™μœΌλ‘œ μƒμˆ˜ ν•„λ“œκ°’μ— 객체λ₯Ό 생성해 λ„£μ–΄μ£Όκ²Œ λœλ‹€.

βœ… 6. 정리

  • μžλ°”μ—μ„œ enum ν‚€μ›Œλ“œλ‘œ λ§Œλ“  ν΄λž˜μŠ€λŠ” 컴파일 μ‹œμ μ— class ν‚€μ›Œλ“œλ‘œ λ³€κ²½λ˜λ©°, ν΄λž˜μŠ€κ°€ λœλ‹€.
  • enum μƒμˆ˜λͺ…은 μžλ™μœΌλ‘œ μƒμˆ˜ ν•„λ“œκ°’μ— 객체λ₯Ό μƒμ„±ν•΄μ„œ λ„£μ–΄μ€€λ‹€.
  • Enum ν΄λž˜μŠ€λŠ” java.lang νŒ¨ν‚€μ§€μ— μΆ”μƒν΄λž˜μŠ€λ‘œ μ‘΄μž¬ν•˜λ©°, ν•΄λ‹Ή Enum을 μžλ™ 상속을 λ°›κ²Œ 됨.

'β˜•Java > πŸ“Java Programming' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] JVMκ³Ό μžλ°” μ‹€ν–‰ 원리  (1) 2025.04.14
[Java] Java와 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?  (0) 2025.03.06
[Java] λ³€μˆ˜ μ΄ˆκΈ°ν™”μ— λŒ€ν•œ 이해  (0) 2024.11.05
[Java] Annotation μ΄λž€? ( μ• λ…Έν…Œμ΄μ…˜ )  (0) 2024.11.05
[Java] JVM λ™μž‘ 원리  (1) 2024.10.23
'β˜•Java/πŸ“Java Programming' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Java] JVMκ³Ό μžλ°” μ‹€ν–‰ 원리
  • [Java] Java와 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?
  • [Java] λ³€μˆ˜ μ΄ˆκΈ°ν™”μ— λŒ€ν•œ 이해
  • [Java] Annotation μ΄λž€? ( μ• λ…Έν…Œμ΄μ…˜ )
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (139) N
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (24) N
        • πŸ–₯️컴퓨터과학과 (1)
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (9) N
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ›οΈμ„Έκ³„μ˜μ •μΉ˜μ™€κ²½μ œ (3)
      • πŸ“šComputer Science (0)
      • πŸ› οΈBackend (2)
      • β˜•Java (0)
        • πŸ“Java Programming (9)
        • 🧩Java Design Pattern (1)
      • 🌳Spring (9)
        • 🌱Spring Framework (6)
        • 🌱Spring Security (1)
      • ⚑Python (13)
      • πŸ›’οΈDatabase (0)
      • 🌿GitHub (1)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • Algorithm Problem Solving (2)
      • Data Structure (1)
      • JavaScript (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (65)
      • μž‘λ‹΄ (1)
      • 정리가 ν•„μš”ν•œ κΈ€ (2)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    컴파일러
    클래슀
    spring
    λ°©μ†‘λŒ€
    μ»΄ν“¨ν„°μ˜ 이해
    세계화
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…κ°œλ‘ 
    μŠ€ν”„λ§
    Spring Framework
    파이썬
    λ°©ν†΅λŒ€
    Python
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    Java
    ν΄λΌμš°λ“œ
    λ©”λͺ¨λ¦¬
    μœ λΉ„μΏΌν„°μŠ€
    μžλ°”
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…
    ν•¨μˆ˜
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[Java] Enum μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”