nyximos.log

[Java] Enum λ³Έλ¬Έ

Programming/JAVA

[Java] Enum

nyximos 2022. 9. 8. 00:55

πŸ‘©‍πŸš€ λͺ©ν‘œ

μžλ°”μ˜ μ—΄κ±°ν˜•μ— λŒ€ν•΄ ν•™μŠ΅ν•˜μ„Έμš”.

πŸ‘©‍πŸ’» ν•™μŠ΅ν•  것

  • enum μ •μ˜ν•˜λŠ” 방법
  • enum이 μ œκ³΅ν•˜λŠ” λ©”μ†Œλ“œ (values()와 valueOf())
  • java.lang.Enum
  • EnumSet

 

 

 

Enum Type

  • μ—¬λŸ¬ μƒμˆ˜λ₯Ό μ„ μ–Έ ν•  λ•Œ νŽΈλ¦¬ν•˜κ²Œ μ„ μ–Έν•  수 μžˆλŠ” 방법
  • ν•„λ“œμ˜ 이름은 μƒμˆ˜μ΄λ―€λ‘œ λŒ€λ¬Έμžλ‘œ ν‘œμ‹œν•œλ‹€.
  • JDK 1.5에 μΆ”κ°€λ˜μ—ˆλ‹€.
  • JDK 1.5 μ΄μ „μ—λŠ” μƒμˆ˜λ₯Ό μ—΄κ±°ν˜• λŒ€μ‹  μ‚¬μš©ν•˜μ˜€λ‹€.
  • μ—΄κ±°ν˜• 뢀뢄에 μ •μ˜λœ μƒμˆ˜κ°€ μžλ™μœΌλ‘œ μƒμ„±λœλ‹€.
  • λ”°λ‘œ 값을 지정해주지 μ•Šμ•„λ„ μžλ™μ μœΌλ‘œ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” μ •μˆ˜κ°’μ΄ ν• λ‹Ήλœλ‹€. (ordinal() 이 μ—΄κ±°ν˜• μƒμˆ˜κ°€ μ •μ˜λœ μˆœμ„œ λ°˜ν™˜)
  • 이 μ •μˆ˜κ°’μ€ 내뢀적인 μš©λ„λ‘œλ§Œ μ‚¬μš©λ˜κΈ° μœ„ν•œ κ²ƒμ΄λΌμ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.
  • μƒμˆ˜μ˜ 값이 λΆˆκ·œμΉ™μ μΈ κ²½μš°μ—λŠ” μ—΄κ±°ν˜• μƒμˆ˜μ˜ 이름 μ˜†μ— μ›ν•˜λŠ” 값을 κ΄„ν˜Έμ™€ ν•¨κ»˜ 적어쀀닀.

 

 

 

enum μ •μ˜ν•˜λŠ” 방법

enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

κ΄„ν˜Έ { } μ•ˆμ— μƒμˆ˜μ˜ 이름을 λ‚˜μ—΄ν•œλ‹€.

enum μ—΄κ±°ν˜•μ΄λ¦„ { μƒμˆ˜λͺ…1, μƒμˆ˜λͺ…2, ... }

enum Direction { EAST, SOUTH, WEST, NORTH }

 

μ •μ˜λœ μƒμˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” μ—΄κ±°ν˜•.μƒμˆ˜λͺ… 으둜 μ‚¬μš©ν•œλ‹€.

클래슀의 static λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” 것과 λ™μΌν•˜λ‹€.

class Unit{
	int x, y;
    Direction dir;
    
    void init() {
    	dir = Direction.EAST;
    }
}

 

 

 

 

enum이 μ œκ³΅ν•˜λŠ” λ©”μ†Œλ“œ (values()와 valueOf())

String name( )

μ—΄κ±°ν˜• μƒμˆ˜ 이름을 λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

 

int ordinal( )

μ—΄κ±°ν˜• μƒμˆ˜κ°€ μ •μ˜λœ μˆœμ„œλ₯Ό λ°˜ν™˜ν•œλ‹€. (0λΆ€ν„° μ‹œμž‘) 

λͺ¨λ“  μ—΄κ±°ν˜•μ˜ 쑰상인 java.lang.Enum ν΄λž˜μŠ€μ— μ •μ˜λœ 것

 

T[ ] values( )

ν•΄λ‹Ή enumμ˜μ— μ •μ˜λœ λͺ¨λ“  μƒμˆ˜λ“€μ„ λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

λͺ¨λ“  μ—΄κ±°ν˜•μ— μžλ™μ μœΌλ‘œ μΆ”κ°€ν•΄μ£ΌλŠ” λ©”μ„œλ“œ

 

T valueOf(Class<T> enumType, String name)

μ§€μ •λœ enumTypeμ—μ„œ nameκ³Ό μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄ μƒμˆ˜μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό λ°˜ν™˜ν•œλ‹€.

λͺ¨λ“  μ—΄κ±°ν˜•μ— μžλ™μ μœΌλ‘œ μΆ”κ°€ν•΄μ£ΌλŠ” λ©”μ„œλ“œ

 

https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html

 

Enum (Java Platform SE 7 )

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) Note that for a particular enum typ

docs.oracle.com

 

 

 

java.lang.Enum

λͺ¨λ“  μ—΄κ±°ν˜•μ˜ 쑰상은 java.lang.Enum이닀.

μ„€λͺ…ν–ˆλ˜ λ©”μ„œλ“œλ“€μ΄ java.lang.Enum ν΄λž˜μŠ€μ—  μ •μ˜λ˜μ–΄ μžˆλ‹€.

λͺ¨λ“  μ—΄κ±°ν˜•μ€ Enum 클래슀λ₯Ό 상속받기 λ•Œλ¬Έμ— enum은 λ‹€λ₯Έ 것듀을 상속받을 수 μ—†λ‹€.

 

 

 

 

EnumSet

  • μ—΄κ±°ν˜•μ— μ‚¬μš©ν•˜κΈ° μœ„ν•œ Set μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ²΄
  • Null을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • λŒ€λΆ€λΆ„ μ»¬λ ‰μ…˜ κ΅¬ν˜„κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ synchronize λ˜μ§€ μ•ŠλŠ”λ‹€.
  • λ™κΈ°μ‹μœΌλ‘œ μ‚¬μš©ν•˜λ €λ©΄ μ™ΈλΆ€μ—μ„œ λ™κΈ°ν™”ν•˜κ±°λ‚˜ Collections.synchronizedSet(java.util.Set<T>) λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

EnumSet<E> allOf(Class<E> elementType)

지정 μš”μ†Œ νƒ€μž…μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” EnumSet을 μƒμ„±ν•œλ‹€.

 

EnumSet<E> of(@NotNull E e1, @NotNull E e2)

μ§€μ •ν•œ μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” EnumSet을 μƒμ„±ν•œλ‹€.

 

EnumSet<E> complementOf(@NotNull EnumSet<E> s)

μ§€μ •ν•œ EnumSetκ³Ό λ™μΌν•œ μš”μ†Œλ₯Ό 가진 EnumSet을 μƒμ„±ν•œλ‹€.

 

EnumSet<E> range(@NotNull E from, @NotNull E to)

두 λμ μ—μ„œ μ •μ˜λœ λ²”μœ„μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” EnumSet을 μƒμ„±ν•œλ‹€.

μˆœμ„œκ°€ λ’€λ°”λ€Œλ©΄ μ•ˆλœλ‹€.

 

EnumSet<E> noneOf(Class<E> elementType)

μ§€μ •ν•œ 같은 νƒ€μž…μ˜ 빈 EnumSet을 μƒμ„±ν•œλ‹€.

 

enum Coffe {
    AERICANO, COLDBREW, CAPPUCCINO, LATTE, AFFOGATO, MOCHA
}

public class EnumTest {
    public static void main(String[] args) {
        EnumSet<Coffe> set1, set2, set3, set4, set5;

        set1 = EnumSet.allOf(Coffe.class);
        set2 = EnumSet.of(Coffe.LATTE, Coffe.AFFOGATO);
        set3 = EnumSet.complementOf(set2);
        set4 = EnumSet.range(Coffe.AERICANO, Coffe.CAPPUCCINO);
        set5 = EnumSet.noneOf(Coffe.class);
        set5.add(Coffe.COLDBREW);
        set5.add(Coffe.MOCHA);

        System.out.println("set1 = " + set1);
        System.out.println("set2 = " + set2);
        System.out.println("set3 = " + set3);
        System.out.println("set4 = " + set4);
        System.out.println("set5 = " + set5);
    }
}
set1 = [AERICANO, COLDBREW, CAPPUCCINO, LATTE, AFFOGATO, MOCHA]
set2 = [LATTE, AFFOGATO]
set3 = [AERICANO, COLDBREW, CAPPUCCINO, MOCHA]
set4 = [AERICANO, COLDBREW, CAPPUCCINO]
set5 = [COLDBREW, MOCHA]

 

https://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html

 

EnumSet (Java Platform SE 7 )

A specialized Set implementation for use with enum types. All of the elements in an enum set must come from a single enum type that is specified, explicitly or implicitly, when the set is created. Enum sets are represented internally as bit vectors. This r

docs.oracle.com

 

 

 

μ°Έμ‘°

11주차 과제: Enum

https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

 

'Programming > JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] I/O  (1) 2022.09.21
[Java] μ• λ…Έν…Œμ΄μ…˜  (1) 2022.09.11
[Java] λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°  (0) 2022.09.06
[Java] μ˜ˆμ™Έ 처리  (0) 2022.09.01
[Java] μΈν„°νŽ˜μ΄μŠ€  (1) 2022.08.29