프로그래밍

자바와 닷넷 비교 - ENUM

Jinwookoh 2025. 3. 2. 20:07

자바(Java)와 닷넷(.NET)에서 enum(열거형) 사용법을 비교하면 다음과 같은 차이점이 있습니다.


1. 기본 선언 방식

Java

public enum Color {
    RED, GREEN, BLUE
}

C# (.NET)

public enum Color
{
    Red,
    Green,
    Blue
}

 

차이점

  • Java에서는 enum 값이 UPPER_CASE로 쓰이는 것이 일반적이고, .NET에서는 PascalCase를 주로 사용합니다.
  • Java에서는 ; 없이 나열 가능하지만, .NET에서는 각 요소 끝에 ,를 붙입니다.

2. Enum 값에 특정 값 할당

Java

public enum Color {
    RED(1), GREEN(2), BLUE(3);

    private final int value;

    Color(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

C# (.NET)

public enum Color
{
    Red = 1,
    Green = 2,
    Blue = 3
}

 

차이점

  • Java에서는 생성자를 활용해 값을 저장해야 하지만, C#에서는 바로 값 할당이 가능합니다.

3. Enum 사용 예시

Java

Color myColor = Color.RED;
System.out.println(myColor); // RED
System.out.println(myColor.getValue()); // 1

C# (.NET)

Color myColor = Color.Red;
Console.WriteLine(myColor); // Red
Console.WriteLine((int)myColor); // 1

 

차이점

  • C#에서는 (int)enum으로 캐스팅하면 바로 숫자로 변환됩니다.
  • Java에서는 getValue() 같은 메서드를 만들어야 합니다.

4. 문자열 변환

Java

Color color = Color.valueOf("RED"); // 문자열을 Enum으로 변환
System.out.println(color); // RED

C# (.NET)

Color color = (Color)Enum.Parse(typeof(Color), "Red");
Console.WriteLine(color); // Red

 

차이점

  • Java에서는 Enum.valueOf("NAME") 사용
  • C#에서는 Enum.Parse(typeof(Color), "NAME") 사용

5. Enum 값 순회 (Iteration)

Java

for (Color c : Color.values()) {
    System.out.println(c);
}

C# (.NET)

foreach (Color c in Enum.GetValues(typeof(Color))) {
    Console.WriteLine(c);
}

 

차이점

  • Java에서는 .values() 사용
  • C#에서는 Enum.GetValues(typeof(EnumType)) 사용

6. Enum 확장 (메서드 추가)

Java

public enum Color {
    RED(1), GREEN(2), BLUE(3);

    private final int value;

    Color(int value) { this.value = value; }

    public int getValue() { return value; }

    public static Color fromValue(int value) {
        for (Color c : Color.values()) {
            if (c.value == value) return c;
        }
        throw new IllegalArgumentException("Invalid value");
    }
}

C# (.NET)

public static class ColorExtensions
{
    public static string ToFriendlyString(this Color color)
    {
        return color switch
        {
            Color.Red => "Red Color",
            Color.Green => "Green Color",
            Color.Blue => "Blue Color",
            _ => "Unknown"
        };
    }
}

 

차이점

  • Java에서는 enum 내부에 메서드를 직접 추가할 수 있음.
  • C#에서는 enum을 수정할 수 없기 때문에 **확장 메서드 (Extension Method)**를 사용.

7. JSON 직렬화 차이

Java (Jackson 라이브러리 사용)

ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Color.RED); 
System.out.println(json); // "RED"

 

C# (System.Text.Json 사용)

string json = JsonSerializer.Serialize(Color.Red);
Console.WriteLine(json); // "Red"

 

차이점

  • 기본적으로 JSON 변환 시 Java와 C# 모두 Enum 이름을 문자열로 변환
  • Java에서 Enum 값을 숫자로 직렬화하려면 @JsonValue 사용해야 함.

8. Enum 플래그 (Bitwise Enum)

C#에서는 Flags 속성을 이용하여 비트 연산을 사용할 수 있음.

[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Execute = 4
}

Permissions userPermissions = Permissions.Read | Permissions.Write;
Console.WriteLine(userPermissions); // Read, Write

 

Java에서는 직접 Bitwise OR 연산을 사용해야 함.

public class Permissions {
    public static final int NONE = 0;
    public static final int READ = 1;
    public static final int WRITE = 2;
    public static final int EXECUTE = 4;
}

int userPermissions = Permissions.READ | Permissions.WRITE;
System.out.println(userPermissions); // 3 (1 | 2)

 

차이점

  • C#에서는 Flags 속성을 지원하여 다중 선택 가능.
  • Java에서는 int 값을 직접 비트 연산해야 함.

9. Enum 비교 방법

Java

if (myColor == Color.RED) { 
    System.out.println("It's red!"); 
}

 

C#

if (myColor == Color.Red)
{
    Console.WriteLine("It's red!");
}

 

차이점

  • Java와 C# 모두 == 연산자로 비교 가능 (참조 비교 X, 값 비교 O)

결론 (정리)

기능  Java  C# (.NET)
기본 선언 enum 클래스 내부에 값만 정의 enum 직접 값 할당 가능
값 할당 생성자 사용 바로 숫자 지정 가능
값 가져오기 getValue() 메서드 사용 (int)enum 캐스팅
문자열 변환 Enum.valueOf() Enum.Parse(typeof(Enum), "NAME")
반복문 Color.values() Enum.GetValues(typeof(Color))
메서드 추가 내부에 직접 추가 가능 확장 메서드 사용
JSON 직렬화 @JsonValue 필요 기본적으로 문자열 변환
비트 연산 (Flags) 직접 int 사용 [Flags] 속성 사용 가능
비교 == 연산자 사용 == 연산자 사용

📌 Java는 객체 지향적인 방식 (생성자, 메서드 활용)
📌 C#은 보다 직관적인 방식 (int 캐스팅, Flags 지원)

C#이 좀 더 Enum을 단순하게 다룰 수 있도록 설계된 반면, Java는 더 객체지향적인 구조로 설계되어 있습니다.