Study/Java

[TIL] enum

hong- 2022. 5. 18. 14:16

☝🏻 enum μ—΄κ±°ν˜•

 - μ„œλ‘œ μ—°κ΄€λœ μƒμˆ˜λ“€μ˜ μ§‘ν•©

 - μ„œλ‘œ 관련이 μžˆλŠ” 것듀을 λͺ¨μ•„μ„œ 그것듀에 번호λ₯Ό 맀겨 놓은 것

(1) 뢄식 : 떑볢이, νŠ€κΉ€, κΉ€λ°₯, μˆœλŒ€
(2) 곡뢀 : 곡책, μ—°ν•„, 볼펜, ν˜•κ΄‘νŽœ, μ§€μš°κ°œ, 샀프
(3) 개발자 : κ°•μ‹œν˜, μ΄ν˜„μ„, 홍민정

πŸ“ enum μž₯점 

  (1) μƒμˆ˜λͺ…μ˜ 쀑볡 ν”Όν•  수 있음

  (2) νƒ€μž… μ•ˆμ •μ„± 보μž₯

  (3) μ½”λ“œ 가독성 μƒμŠΉ

  (4) switchλ¬Έ μ‚¬μš© κ°€λŠ₯


πŸ“ enum μ—΄κ±°ν˜• μ‚¬μš©

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

  - μƒμˆ˜λŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것 μΆ”μ²œ

 (1) μ°Έμ‘° 방법

μ—΄κ±°ν˜•μ΄λ¦„.μƒμˆ˜λͺ… 
Developer.HONG

 (2) λ³€μˆ˜ ν• λ‹Ή κ°€λŠ₯ 

Developer bestdev = Developer.HONG;

πŸ“ μ—΄κ±° 객체 λ©”μ†Œλ“œ

 (1) String name()

Week today = week.SUNDAY;
String name = today.name();

  - μ—΄κ±° 객체가 κ°–λŠ” λ¬Έμžμ—΄ 리턴 (μƒμˆ˜ 이름)

 (2) int ordinal()

  - μ—΄κ±° 객체의 순번 λ°˜ν™˜

Week today = Week.MONDAY ;
int ordinal = today.ordinal();

 (3) int comepareTo(비ꡐ값)

  - μ£Όμ–΄μ§„ λ§€κ°œκ°’κ³Ό λΉ„κ΅ν•΄μ„œ 순번 차이 리턴

  - 열거객체 one이 열거객체 two보닀 μ•žμ΄λ©΄ -

  - 열거객체 one이 열거객체 two보닀 λ’€λ©΄ +

Week one = Week.MONDAY;
Week two = Week.WEDNESDAY;
int result = one.compareTo(two);

 (4) valueOf(λ¬Έμžμ—΄μ΄λ¦„)

  - 맀개 κ°’μœΌλ‘œ μ£Όμ–΄μ§„ λ¬Έμžμ—΄κ³Ό λ™μΌν•œ λ¬Έμžμ—΄μ„ κ°€μ§€λŠ” μ—΄κ±° 객체 리턴

Week today = Week.valueOf("SUNDAY");

 (5) values()

  - λͺ¨λ“  μ—΄κ±° 객체듀을 λ°°μ—΄λ‘œ 리턴

  - μ—΄κ±° νƒ€μž…μ˜ λͺ¨λ“  객체듀을 λ°°μ—΄λ‘œ λ§Œλ“€μ–΄ 리턴

Week[] week = Week.values();

πŸ“ public static final의 문제점

  (1) public static final μƒμˆ˜ μ •μ˜ 

    - enum이 λ“±μž₯ν•˜κΈ° 전에 μ—¬λŸ¬ μƒμˆ˜λ₯Ό μ •μ˜ν•΄μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 'public static final'λ₯Ό 톡해 μƒμˆ˜ μ„€μ •

     → But, λ‹€λ₯Έ λ²”μ£Όμ—μ„œ μƒμˆ˜λͺ…이 μ€‘λ³΅λ˜λŠ” 경우 λ°œμƒν•  수 있음 ( 컴파일 μ—λŸ¬ λ°œμƒ )

public static final int KANGJAMES = 1;
public static final int LEEJAMES = 2;
public static final int HONG = 3;

public static final int WOOJOO = 1;
public static final int HONG = 2;
public static final int SOYOUNG = 3;

   (2) μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•œ ꡬ뢄

    - μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©ν•˜μ—¬ μƒμˆ˜λͺ…이 μ€‘λ³΅λ˜λŠ” 경우 ν•΄κ²°

     → But, νƒ€μž… μ•ˆμ •μ„± 문제 생김 !!!

        : Develop.HONG의 κ°’ 3κ³Ό Bf.HONG의 κ°’ 2λ₯Ό λΉ„κ΅ν•˜λ©΄ 비ꡐ할 수 μ—†λŠ” κ°œλ…μ΄μ§€λ§Œ μ—λŸ¬ X

interface Develop {
	int KANGJAMES = 1, LEEJAMES = 2, HONG = 3;
}

interface Bf {
	int WOOJOO = 1, HONG = 2, SOYOUNG = 3;
}

  (3) μ„œλ‘œ λ‹€λ₯Έ 객체둜 생성

   - 쀑볡과 νƒ€μž… μ•ˆμ •μ„± 문제 ν•΄κ²°

     → But, μ½”λ“œκ°€ κΈΈμ–΄μ§€κ³  μ‚¬μš©μž μ •μ˜ νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— switchλ¬Έ μ‚¬μš© X

         switch문은 intνƒ€μž… μ΄ν•˜μ˜ μ •μˆ˜, 문자, String만 O 

class Develop {
public static final Develop KANGJAMES = new Develop();
public static final Develop LEEJAMES = new Develop();
public static final Develop HONG = new Develop();
}

class Bf {
public static final Bf WOOJOO = new Bf();
public static final Bf HONG = new Bf();
public static final Bf SOYOUNG = new Bf();
}

  (4) enum을 μ΄μš©ν•œ μƒμˆ˜ μ •μ˜

   - μ½”λ“œ νƒ€μž… μ•ˆμ •μ„± 보μž₯ 및 쀑볡 μƒμˆ˜λͺ… μ‚¬μš© κ°€λŠ₯

   - μ½”λ“œ 가독성 μ’‹μŒ

   - switchλ¬Έ μ‚¬μš© κ°€λŠ₯

enum Develop { KANGJAMES, LEEJAMES, HONG }
enum Bf { WOOJOO, HONG, SOYOUNG }