Skip to content

Latest commit

Β 

History

History
178 lines (149 loc) Β· 5.84 KB

File metadata and controls

178 lines (149 loc) Β· 5.84 KB

μƒμˆ˜λž€?

  • μƒμˆ˜λŠ” λ³€ν•˜μ§€ μ•ŠλŠ” κ°’μž„
  • 예λ₯Ό λ“€μ–΄ λ³€ν•˜μ§€ μ•ŠλŠ” μƒμˆ˜κ°’μ— λ”°λΌμ„œ 그값에 ν•΄λ‹Ήν•˜λŠ” 과일의 의미λ₯Ό κ³ μ •ν•œλ‹€κ³  κ°€μ •. 그런데 μ£Όμ„μœΌλ‘œ μƒμˆ˜μ˜ 의미λ₯Ό μ „λ‹¬ν•˜κ³ μžˆμ§€λ§Œ 주석이 μ—†μ–΄μ‘Œμ„ κ²½μš°μ—λŠ” μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œλ₯Ό μ•Œμ•„λ³΄κΈ° νž˜λ“€λ‹€.
  • 이런 λ•Œμ—λŠ” 이름을 μ„ μ–Έν•΄ μ£ΌλŠ” 것이 μ’‹μŒ λ³€μˆ˜λ₯Ό μ§€μ •ν•˜κ³  κ·Έλ³€μˆ˜λ₯Ό final 둜 μ²˜λ¦¬ν•˜λ©΄ ν•œλ²ˆ μ„€μ •λœ λ³€μˆ˜λŠ” λ°”λ€Œμ§€μ•ŠμŒ λ˜ν•œ λ°”λ€Œμ§€ μ•ŠλŠ” 값이라면 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€μ•„λ‹ˆλΌ 클래슀 λ³€μˆ˜ static 으둜 μ§€μ •ν•˜λŠ” 것이 μ’‹μŒ
  • private final static int APPLE=1;
  • λ‹€λ₯Έλ‚΄μš© : switch 문을 μ‚¬μš©ν• λ•ŒλŠ” switch의 쑰건으둜 μ œν•œλœ 데이터 νƒ€μž…λ§Œ μ‚¬μš©κ°€λŠ₯ byte,short,char,int, enum,String,Character,Byte,Short,Integer

enumμ΄λž€?

  • μ—΄κ±°ν˜•μ΄λΌκ³  뢀름(enumerated type)
  • μ—΄κ±°ν˜•μ€ μ„œλ‘œ μ—°κ΄€λœ μƒμˆ˜λ“€μ˜ μ§‘ν•©
  • enum은 class, interface와 λ™κΈ‰μ˜ ν˜•μ‹μ„ κ°€μ§„ λ‹¨μœ„
  • 사싀상 class이며 편의λ₯Ό μœ„ν•΄μ„œ enum만의 μœ„ν•œ 문법적 ν˜•μ‹μ„ κ°€μ§€κ³ μžˆμŒ, κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ enum ν‚€μ›Œλ“œ μ‚¬μš©

enum μ‚¬μš©ν•˜λŠ” 이유

  • μ½”λ“œκ°€ λ‹¨μˆœν•΄μ§„λ‹€.
  • μΈμŠ€ν„΄μŠ€ 생성과 상속을 λ°©μ§€
  • ν‚€μ›Œλ“œ enum을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— κ΅¬ν˜„μ˜ μ˜λ„κ°€ μ—΄κ±°μž„μ„ λΆ„λͺ…ν•˜κ²Œ λ‚˜νƒ€λ‚Όμˆ˜ 있음

enum 문법

package org.opentutorials.javatutorials.constant2;
/*
class Fruit{
    public static final Fruit APPLE  = new Fruit();
    public static final Fruit PEACH  = new Fruit();
    public static final Fruit BANANA = new Fruit();
}
class Company{
    public static final Company GOOGLE = new Company();
    public static final Company APPLE = new Company();
    public static final Company ORACLE = new COMPANY(Company);
}
*/

// μœ„μ™€ λ™μΌν•œ 의미
enum Fruit{
  APPLE,PEACH,BANANA
}
enum Company{
  GOOGLE,APPLE,ORACLE
}

public class ConstantDemo {
    
    public static void main(String[] args) {
       
       /* if(Fruit.APPLE == Company.APPLE){
            System.out.println("과일 μ• ν”Œκ³Ό νšŒμ‚¬ μ• ν”Œμ΄ κ°™λ‹€.");
        }
        */
         Fruit type = Fruit.APPLE;
        switch(type){
          case APPLE:
              System.out.println(57+" kcal");
              break;
          case PEACH:
              System.out.println(34+" kcal");
              break;
          case BANANA:
              System.out.println(93+" kcal");
              break;
        }
    }
}

enumκ³Ό μƒμ„±μž

  • enum 은 사싀상 클래슀이기 떄문에 μƒμ„±μžλ₯Ό κ°€μ§ˆμˆ˜ 있음
  enum Fruit{
    APPLE("red"),PEACH("pink"),BANANA("yellow");
    private String color;
    public String getColor(){
      return this.color;
    }
    Fruit(String color){
      System.out,println("Call Constructor"+this);
      this.color = color;
    }
  }
  enum Company{
    GOOGLE,APPLE,ORACLE
  }

  public class ConstantDemo {
      
      public static void main(String[] args) {
           Fruit type = Fruit.APPLE;
          switch(type){
            case APPLE:
                System.out.println(57+" kcal"+Fruit.APPLE.getColor());
                break;
            case PEACH:
                System.out.println(34+" kcal"+Fruit.PEACH.getColor();
                break;
            case BANANA:
                System.out.println(93+" kcal"+Fruit.BANANA.getColor());
                break;
          }

          for(Fruit f : Fruit.values()){
            System.out.println(f);
          }
      }
  }

μ—΄κ±°ν˜•μ˜ νŠΉμ„±

  • μ—΄κ±°ν˜•μ€ μ—°κ΄€λœ 값듀을 μ €μž₯함
  • λ˜ν•œ 그값듀이 λ³€κ²½λ˜μ§€ μ•Šλ„λ‘ 보μž₯함
  • μ—΄κ±°ν˜• μžμ²΄κ°€ 클래슀이기 떄문에 μ—΄κ±°ν˜• 내뢀에 μƒμ„±μž,ν•„λ“œ λ©”μ†Œλ“œλ₯Ό κ°€μ§ˆμˆ˜κ°€ μžˆμ–΄μ„œ λ‹¨μˆœνžˆ μƒμˆ˜κ°€ μ•„λ‹ˆλΌ λ”λ§Žμ€ 역할을 ν•  수 있음

enum을 μ‚¬μš©ν•΄μ„œ switch/case λ¬Έ λŒ€μ‹  κ΅¬ν˜„ν•˜κΈ° 제

enum Expression {
    PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/");
    
    private String expression

    Expression(String expression){
      this.expression = expression;
    }

    static Expression of(String expression){
        return Arrays.stream(values())
                     .filter(v -> expression.equals(v.expression))
                     .findFirst()
                     .orElseThrow(() -> new IllegealArgumentException(String.format("%s 사칙연산에 ν•΄λ‹Ήλ˜μ§€ μ•Šμ€ ν‘œν˜„μ‹μž…λ‹ˆλ‹€.",expression)));
    }
}

enum을 μ‚¬μš©ν•΄μ„œ if/else λ¬Έ λŒ€μ‹  κ΅¬ν˜„ν•˜κΈ° 예제

  • μ•„λž˜μ™€ 같이 κ΅¬ν˜„ν•˜λ©΄ λΆˆν•„μš”ν•œ if/else 문을 μƒλž΅ν•  수 있음
  • Java Enum ν™œμš©κΈ° λ§ν¬μ—μ„œ ν•΄λ‹Ή μ½”λ“œ 발췌
public enum PayGroup {
    CASH("ν˜„κΈˆ", Arrays.asList("ACCOUNT_TRANSFER", "TOSS")),
    CARD("μΉ΄λ“œ", Arrays.asList("CARD", "KAKAO_PAY", "PAYCO")),
    ETC("기타", Arrays.asList("POINT", "COUPON")),
    EMPTY("μ—†μŒ", Collections.EMPTY_LIST);
    private String title;
    private List<String> payList;

    PayGroup(String title, List<String> payList) {
        this.title = title;
        this.payList = payList;
    }

    public static PayGroup findByPayCode(String code) {
        return Arrays.stream(values())
                .filter(payGroup -> payGroup.hasPayCode(code))
                .findAny()
                .orElse(EMPTY);
    }

    private boolean hasPayCode(String code) {
        return payList.stream()
                .anyMatch(pay -> pay.equals(code));
    }

    public String getTitle() {
        return title;
    }
}

μ°Έκ³ μ‚¬μ΄νŠΈ