enum 클래슀

μ™œ μ‚¬μš©ν•˜λŠ”κ±ΈκΉŒ?

enum ν΄λž˜μŠ€λŠ” μ—΄κ±°ν˜• 클래슀둜 μ„œλ‘œ κ΄€λ ¨μžˆλŠ” μƒμˆ˜λ“€μ„ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

λ¬Όλ‘  κ·Έλƒ₯ 클래슀 μƒμˆ˜λ₯Ό μ •μ˜ν•΄μ„œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€. ν•˜μ§€λ§Œ νƒ€μž…λ§Œ κ°™μœΌλ©΄ λ‚΄κ°€ μ˜λ„ν•œ μƒμˆ˜ 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ 값도 μƒμˆ˜μ²˜λŸΌ 쓰일 수 μžˆλ‹€λŠ” 문제점이 μžˆλ‹€.

public class Example {
	public static final String TRUE = "TRUE";
	public static final String FALSE = "FALSE";
	
	public static void main(String[] args) {
		String state;
		state = Example.TRUE;
		state = Example.FALSE;
		state = "true"; // λ‚΄κ°€ μ •μ˜ν•œ μƒμˆ˜κ°€ μ•„λ‹ˆμ§€λ§Œ νƒ€μž…μ΄ κ°™μ•„μ„œ κ°€λŠ₯ν•˜λ‹€
	}
}

κ·Έλ ‡λ‹€λ©΄ enum 클래슀λ₯Ό ν™œμš©ν•΄μ„œ νƒ€μž…μ„ 톡해 μƒμˆ˜λ₯Ό 검증할 수 μžˆλ„λ‘ ν•΄λ³΄μž

public class Example {
	public static void main(String[] args) {
		State state;
		state = State.TRUE;
		state = State.FALSE;
		state = "state"; // νƒ€μž…μ΄ λ‹¬λΌμ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€
	}
}
enum State{
	TRUE, FALSE
}

그런데 enum ν΄λž˜μŠ€λŠ” μ–΄λ–»κ²Œ μƒμˆ˜λ₯Ό λ§Œλ“œλŠ” 걸까?

이것을 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” enum 클래슀의 μƒμ„±μžκ°€ μž‘λ™ν•˜λŠ” 방식에 λŒ€ν•΄μ„œ μ•Œμ•„μ•Ό ν•œλ‹€.

enum 클래슀의 μƒμ„±μž

μœ„μ—μ„œ 예제λ₯Ό μžμ„Ένžˆ μ•Œμ•„λ³΄μž.

enum State{
	TRUE, FALSE
}

이 ν΄λž˜μŠ€λŠ” 사싀 μžλ™μœΌλ‘œ μ΄λ ‡κ²Œ μƒμ„±μžκ°€ λ§Œλ“€μ–΄μ§€κ³  μžˆμ—ˆλ‹€. 이떄 μ ‘κ·Ό μ œν•œμžκ°€ private인 점에 μ£Όλͺ©ν•˜μž.

enum State{
	static final State TRUE = new State();
    static final State FALSE = new State();
    private State(){}
}

κ·Έλ ‡λ‹€λ©΄ β€˜μƒμ„±μžμ— λ‹€λ₯Έ 값을 μ€€λ‹€λ©΄ enum 클래슀의 μƒμˆ˜λ“€λ„ 값을 가지지 μ•Šμ„κΉŒ?’ λΌλŠ” 생각이 λ“€ 수 도 μžˆλ‹€.

μ‹€μ œλ‘œ 우리의 μ˜ˆμƒκ³Ό 같이 Java의 enum 클래슀의 μƒμˆ˜λ“€μ€ 값을 κ°€μ§ˆ 수 μžˆλ‹€.

enum State{
	TRUE(0), FALSE(1)
}

ν•˜μ§€λ§Œ μ΄λ•Œ β€˜;’와 값을 μ €μž₯ν•  λ³€μˆ˜, μƒˆλ‘œμš΄ μƒμ„±μžλ₯Ό μΆ”κ°€ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

enum State{
	TRUE(0), FALSE(1); // ';'을 μΆ”κ°€ν•΄μ£Όμ—ˆλ‹€
	private final int value;
	State(int value) {this.value = value;}
	public int getValue() {return value;}
}

μ—¬κΈ°μ„œ μƒμ„±μžμ— λŒ€ν•΄μ„œ 쒀더 λΆ„μ„ν•΄λ³΄μž. μœ„μ—μ„œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ•„λž˜μ˜ 과정은 μžλ™μœΌλ‘œ 이뀄진닀.

μ΄λ•Œ λ§ˆμ°¬κ°€μ§€λ‘œ μ ‘κ·Όμ œν•œμžλŠ” private이기 λ•Œλ¬Έμ— 클래슀 μ™ΈλΆ€μ—μ„œ ν˜ΈμΆœν•  수 μ—†λ‹€.

enum State{
    static final State TRUE = new State(0);
    static final State FALSE = new State(1);
    
    private State(int value) {this.value = value;}
}