[Java] enum (열거형)

toget ㅣ 2023. 10. 3. 11:17

enum

Java에서 enum은 열거형(enumeration)의 약어로 사용되며, 서로 연관된 상수들의 집합을 나타내는 데이터 타입입니다. 열거형은 주로 관련된 값들을 그룹화하고, 코드를 보다 가독성 있게 작성하고 유지보수하기 쉽게 만들기 위해 사용됩니다.

 

예시

public enum Week {
//열거형 타입
MONDAY, TUESDAY,WEDNSDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}

 

public static void main(String []args)throws Exception {
	Week week = Week.FRIDAY;
//week=1; 열거형타입으로 의한 변수는 해당 열거형의 데이터만 입력할 수 있다.
	week= Week.SATURDAY;
	switch(week) {
		case SUNDAY:
		System.out.println("일요일이다! 일찍자라");
		break;
	}
}

위의 예시에서 Week는 새로운 데이터 타입으로, MONDAY, TUESDAY, ... 등은 Week 열거형의 가능한 값들입니다. 이런식으로 enum을 사용하면 코드에서 요일을 나타내는 데 문자열이나 정수와 같은 다른 타입을 사용하는 대신, Week.MONDAY, Week.TUESDAY,와 같은 가독성 높은 코드를 작성할 수 있습니다.

 

예시2

enum Size {
    SMALL("Small Size"), MEDIUM("Medium Size"), LARGE("Large Size");
    private String label;

    Size(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

 

public class EnumExample {
    public static void main(String[] args) {
        Size mySize = Size.MEDIUM;
		System.out.println("Selected size: " + mySize.getLabel());
		System.out.println("Available sizes:");
			
        for(Size size : Size.values()) {
			System.out.println(size.name() + ": " + size.getLabel());
		}
    }
}

결과
Selected size: Medium Size
Available sizes:
SMALL: Small Size
MEDIUM: Medium Size
LARGE: Large Size

이 예제에서 Size 열거형은 세 가지 크기 옵션을 가지며, 각 크기에 대한 설명을 나타내는 label 필드와 getLabel() 메소드가 있습니다. EnumExample 클래스의 main 메소드에서는 선택한 크기와 가능한 모든 크기의 라벨을 출력합니다.

이렇게 열거형을 사용하면 물건의 크기와 같이 명확하게 정의되고 연관된 값들을 표현할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

enum의 내부 값(정수, 문자열 또는 다른 타입)은 일반적으로 상수로 취급되기 때문에, 값을 직접 변경하거나 연산을 수행하여 수정하는 것은 권장되지 않습니다. enum은 상수의 집합을 나타내는 목적으로 사용되며, 그 값은 불변성을 유지하는 것이 일반적입니다.

enum의 내부 값을 변경하거나 연산을 수행하는 대신, 열거형을 사용하는 코드에서는 다른 방식을 사용하여 상태를 관리하고 조작하는 것이 좋습니다. 예를 들어, enum의 내부 값은 그대로 두고, 해당 상태에 따라 다른 로직을 실행하거나 다른 변수를 조작하는 방식으로 작업을 수행할 수 있습니다.

만약 값의 변경이 필요하다면, enum 대신에 클래스를 사용하거나 클래스 내부에 변경 가능한 필드를 추가하는 방식을 고려해야 합니다. 이렇게 함으로써 값을 변경하거나 연산을 수행할 수 있지만, 적절한 캡슐화와 안정성을 유지하기 위해 주의가 필요합니다.

'Java' 카테고리의 다른 글

[Java] Wrapper class  (0) 2023.10.03
[Java] Math 클래스  (0) 2023.10.03
[Java] java.lang 클래스  (0) 2023.10.03
[Java/eclipse] Module (class path, module path)  (0) 2023.10.03
[Java] 생성자 메서드와 this  (0) 2023.10.03