๐Ÿฅ•
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋ณต์žก๋„ ๊ณ„์‚ฐ ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , ๋™์  ๊ณ„ํš๋ฒ• )
    • ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • ์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด (Longes Increasing Subsequence)
    • Prim's Algorithm
    • ์ •๋ ฌ
    • ์‹œ๊ฐ„๋ณต์žก๋„ ์™€ ๊ณต๊ฐ„๋ณต์žก๋„ ( Time Complexity & Space Complexity )
    • Topological Sort (์œ„์ƒ ์ •๋ ฌ)
  • ์ฑ… ์ฝ๊ณ ๋‚œ ํ›„ ์š”์•ฝ
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ์—์„œ ๋ฐฐ์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ•ด๊ฒฐ ์ „๋žต
    • cleancode
    • ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ
    • ์˜ค๋ธŒ์ ํŠธ
  • CDC
    • debzium
    • kafka
  • ๊ฐœ๋ฐœ ์ƒ์‹
    • asciidoctor
    • ์ปดํŒŒ์ผ๋Ÿฌ
    • ELK ์Šคํƒ
    • ์—”๋””์•ˆ
    • git
    • Gitmoji
    • ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ
    • ์ •๊ทœ ํ‘œํ˜„์‹
    • REST API
    • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ / Blocking๊ณผ NonBlocking
    • Transaction Script์™€ Domain Model
    • ๋””์ž์ธ ํŒจํ„ด
      • ํ–‰๋™ ํŒจํ„ด
      • ๊ฐ์ฒด ์ƒ์„ฑ ํŒจํ„ด
        • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด
        • ๋นŒ๋” ํŒจํ„ด
        • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • [์ƒ์„ฑ ํŒจํ„ด] ํ”„๋กœํ†  ํƒ€์ž… (Prototype Parttern)
        • ์‹ฑ๊ธ€ํ†ค
      • ๊ตฌ์กฐ ํŒจํ„ด
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด
        • ์ปดํฌ์ง“(Composite) ํŒจํ„ด
        • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
        • ํ”„๋ก์‹œ
    • refactoring
      • ์ค‘๋ณต ์ฝ”๋“œ
      • ์ „์—ญ ๋ฐ์ดํ„ฐ
      • ๊ธด ํ•จ์ˆ˜
      • ๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก
      • ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ
      • ์ดํ•ดํ•˜๊ธฐ ํž˜๋“  ์ด๋ฆ„
  • ์ž๋ฃŒ๊ตฌ์กฐ
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • ์ž๋ฃŒ๊ตฌ์กฐ ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„
    • ๊ทธ๋ž˜ํ”„
    • ํž™
    • Red Black Tree
    • stack-queue
    • ํŠธ๋ฆฌ ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • ์–ด๋…ธํ…Œ์ด์…˜
    • ์ œ์–ด๋ฌธ
    • ๋ฐ์ดํ„ฐ ํƒ€์ž…
    • Enum
    • jvm
    • ์—ฐ์‚ฐ์ž
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋ฉ”ํƒ€์ŠคํŽ˜์ด์Šค
      • ์ธํ„ฐํŽ˜์ด์Šค
      • ๋žŒ๋‹ค์‹
      • Optional
      • ์ŠคํŠธ๋ฆผ
  • JavaScript
    • moduleProject
    • webpack-babel
    • ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      • array
      • ํ•จ์ˆ˜ ๋ฐ”์ธ๋”ฉ
      • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์™€ ํฌ์›Œ๋”ฉ
      • Class
      • ๋น„๊ต ์—ฐ์‚ฐ์ž
      • Date ๋‚ด์žฅ ๊ฐ์ฒด
      • destructuring-assignment
      • function
      • ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ
      • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • ๋‚ด์žฅ ํ”„๋กœํ† ํƒ€์ž…
      • new์—ฐ์‚ฐ์ž์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜
      • ๊ฐ์ฒด
      • Object.keys, values, entries
      • ์˜ต์…”๋„ ์ฒด์ด๋‹ '?.'
      • ํ”„๋กœํผํ‹ฐ ํ”Œ๋ž˜๊ทธ
      • ํ”„๋กœํผํ‹ฐ ์ข…๋ฅ˜
      • ํ”„๋กœํ†  ํƒ€์ž…
      • ํ˜ธ์ถœ ์Šค์ผ€์ค„๋ง ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • ํ•จ์ˆ˜์˜ ์ž๋ฃŒํ˜•
      • var_let_const
  • Linux
    • ๊ธฐ๋ณธ ๋ช…๋ น์–ด
    • ํŒŒ์ผ ์ข…๋ฅ˜
    • ๋ฆฌ๋ˆ…์Šค
  • ๋„คํŠธ์›Œํฌ
    • ์‘์šฉ ๊ณ„์ธต ( Application Layer )
    • ์˜ค๋ฅ˜ ๊ฒ€์ถœ๊ณผ ์˜ค๋ฅ˜ ์ •์ •
    • Http
    • Http Header
    • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋ž€
    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต
    • ๋„คํŠธ์›Œํฌ ์ œ์–ด ์˜์—ญ
    • ์ „์†ก ๊ณ„์ธต ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React ๋ž€?
  • Spring
    • Controller
    • ์š”์ฒญ์ด ๋“ค์–ด์™”์„๋•Œ ์Šคํ”„๋ง์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ( ๋‚ด๋ถ€๊ตฌ์กฐ )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository์™€ DAO
    • ์Šคํ”„๋ง ๋นˆ
    • Spring Framework
    • MVC ํŒจํ„ด
    • ๋„๋ฉ”์ธ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA ์–ด๋…ธํ…Œ์ด์…˜
      • ์—”ํ‹ฐํ‹ฐ ๋น„๊ต
      • ๋ณตํ•ฉ ํ‚ค์™€ ์‹๋ณ„ ๊ด€๊ณ„ ๋งคํ•‘
      • JPA ์˜ˆ์™ธ์ฒ˜๋ฆฌ
      • ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ
      • EntityManagerFactory์™€ EntityManager
      • JPA ์ตœ์ ํ™”
      • ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๋งตํ•‘
      • ์—ฐ๊ด€๊ด€๊ณ„
      • ์ƒ์†๊ด€๊ณ„ ๋งตํ•‘
      • ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„์™€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ
      • ๋ฐ์ดํ„ฐ ํƒ€์ž…
      • MySQL ์—ฐ๊ฒฐ
      • Pageable
    • Spring Project๋“ค๊ณผ library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (๋กฌ๋ณต)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • ์ธ๋ฑ์Šค
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web ์ƒ์‹
    • OAuth
    • WAS
    • HTTPํ†ต์‹  ๊ธฐ๋ฐ˜ ์ธ์ฆ
    • ๋ธŒ๋ผ์šฐ์ €
    • CSR ๊ณผ SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • Java์—์„œ์˜ Enum ํŠน์ง•
  • enum ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • 1. ๋ณ„๋„์˜ Java ํŒŒ์ผ๋กœ ์ •์˜
  • 2. ํด๋ž˜์Šค ์•ˆ์— ์ •์˜
  • 3. ํด๋ž˜์Šค ๋ฐ–์— ์ •์˜
  • enum ์‚ฌ์šฉ
  • ์ƒ์ˆ˜์— ๋‹ค๋ฅธ ๊ฐ’ ์ถ”๊ฐ€
  • enum์ด ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • values()
  • valuesOf()
  • ordianal()
  • java.lang.Enum
  • ์ปดํŒŒ์ผ ์‹œ์˜ ๊ฐ์ฒด ์ƒ์„ฑ
  • EnumSet
  • ๋ฉ”์„œ๋“œ
  • EnumMap
  • ๋ฉ”์„œ๋“œ
  • ์ถ”๊ฐ€ ๋‚ด์šฉ
  • type safety
  • Enum์—์„œ ๊ฐ’ ์…‹ํŒ… ํŒ
  • Reference
  1. Java

Enum

๊ธฐ๋ณธ์ ์œผ๋กœ c๋‚˜ c++์˜ enum๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋กœ JDK 1.5์ดํ›„์— ์ƒ๊ธด ํด๋ž˜์Šค์ด๋‹ค.

c์–ธ์–ด์˜ C99 ์ด์ „์—๋Š” booleanํƒ€์ž…์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ณ ๋Š” ํ–ˆ์—ˆ๋‹ค.

typedef enum _boolean {
    FALSE,
    TRUE
} boolean;

#define FALSE 0
#define TRUE 1

Java์—์„œ์˜ Enum ํŠน์ง•

Enum ๋น„๊ต์‹œ์— ๊ฐ’์ด ์•„๋‹Œ ํƒ€์ž…๊นŒ์ง€๋„ ์ฒดํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  Enum์˜ ์ƒ์ˆ˜๊ฐ’์ด ์žฌ์ •์˜ ๋˜์–ด๋„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๋Š”๋‹ค.

enum ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

enum Money { DOLLAR, WON, POUND, EURO, YEN, YUAN }

enum ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ  ์ •์˜๋ฅผ ์–ด๋””์— ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜๋ฅผ ํ•ด๋ณด์ž๋ฉด 3๊ฐ€์ง€์ •๋„๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ๋ณ„๋„์˜ Java ํŒŒ์ผ๋กœ ์ •์˜

[Money.java]

public enum Money {
    DOLLAR, WON, POUND, EURO, YEN, YUAN
}

[example.java]

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}

2. ํด๋ž˜์Šค ์•ˆ์— ์ •์˜

public class example {
    public enum Money {
        DOLLAR, WON, POUND, EURO, YEN, YUAN
    }
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}

3. ํด๋ž˜์Šค ๋ฐ–์— ์ •์˜

enum Money {DOLLAR, WON, POUND, EURO, YEN, YUAN}

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        System.out.println(dollar);
    }
}

์ •์˜ ์œ„์น˜์— ๋”ฐ๋ผ enum๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

enum ์‚ฌ์šฉ

Money.DOLLAR์™€ ๊ฐ™์ด Enum์ด๋ฆ„.์ƒ์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Money money = Money.DOLLAR์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ํ• ๋‹น ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

#include <stdio.h>

enum Money { DOLLAR, WON, POUND, EURO, YEN, YUAN }

int main() {
    enum Money dollar = DOLLAR;
    enum Money won = WON;

    if (dollar == 0) {
        printf("์ถœ๋ ฅ1");        //์ถœ๋ ฅ
    }
    if (won > dollar) {
        printf("์ถœ๋ ฅ2");        //์ถœ๋ ฅ
    }
    return 0;
}

C์˜ enum์€ ๊ฐ ์ƒ์ˆ˜๊ฐ€ intํ˜•์œผ๋กœ ์ €์žฅ๋˜์–ด ์‚ฐ์ˆ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์ˆ˜๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋น„๊ตํ•ด๋„ ๊ฐ™๊ฒŒ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๋„ ์ƒ๊ธด๋‹ค.

 public class example {
        private final static int DOLLAR = 0;
        private final static int WON = 1;
        private final static int POUND = 2;
        private final static int EURO = 3;
        private final static int YEN = 4;

        public static void main(String[] args) {
            System.out.println(DOLLAR == 0);
        }
    }

Enum์ด ์—†์„ ๋•Œ Java์—์„œ๋„ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ class์— private final static int๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์ˆ˜๊ฐ’์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ€๋…์„ฑ์—๋„ ์ข‹์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ช…์ด ๊ฒน์น  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์ƒ์ˆ˜๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋น„๊ต๊ฐ€ ๋œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

public class example {

    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        Money won = Money.WON;

        System.out.println(dollar > won);   //error
        System.out.println(dollar == 0);    //error
    }
}

Java์˜ Enum์€ ๊ฐ ์ƒ์ˆ˜๊ฐ€ ์ƒ์ˆ˜ ๊ทธ ์ž์ฒด๋กœ์จ ์ž‘๋™์„ ํ•˜๊ณ  ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋น„๊ตํ•˜๋ ค๊ณ  ํ•˜๋ฉด compile error๊ฐ€ ๋œฌ๋‹ค.

์ƒ์ˆ˜์— ๋‹ค๋ฅธ ๊ฐ’ ์ถ”๊ฐ€

enum Money {
    DOLLAR("๋‹ฌ๋Ÿฌ"),
    WON("์›"),
    POUND("ํŒŒ์šด๋“œ"),
    EURO("์œ ๋กœ"),
    YEN("์—”"),
    YUAN("์œ„์•ˆ");

    private String hanguelName;

    private Money(){}
    private Money(String hanguelName){this.hanguelName = hanguelName;}

    public String getHanguelName(){
        return hanguelName;
    }
}

public class example {

    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;
        Money won = Money.WON;

        System.out.println(dollar.getHanguelName());
        System.out.println(won.getHanguelName());

    }
}

ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ’์„ ํ• ๋‹น ํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, getter๋ฅผ ์ •์˜ํ•ด์„œ ๊ฐ’์„ ์ฐธ์กฐ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋•Œ ์ƒ์„ฑ์ž๋Š” PRIVATE ์†์„ฑ์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

enumํƒ€์ž…์€ ๊ณ ์ •๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ชจ๋“  ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๋™์ ์œผ๋กœ ๊ฐ’์„ ์ •ํ•ด์ค„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž๋ฅผ private๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๊ณ  final๊ณผ ๋‹ค๋ฆ„์ด ์—†์–ด์ง„๋‹ค.

enum์ด ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ

values()

Enum์˜ ๋ชจ๋“  ์ƒ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

 public class example {
    public static void main(String[] args) {
        for(Money money : Money.values()){
            System.out.println(money);      //์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ
        }
        System.out.println(Money.values()[1]); //WON ์ถœ๋ ฅ
        System.out.println(Money.values() instanceof Object); //true
    }
 }

Money[]ํ˜•ํƒœ์˜ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜์ด ๋œ๋‹ค.

valuesOf()

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Stringํ˜•์ด ์˜ค๋ฉฐ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ƒ์ˆ˜๋ฅผ ์ฐพ์•„ ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๊ณ  ์—†๋‹ค๋ฉด IllegalArgumentException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 public class example {
    public static void main(String[] args) {
        System.out.println(Money.valueOf("WON"));   //WON ์ถœ๋ ฅ
        System.out.println(Money.valueOf("Rupee")); //IllegalArgumentException error
    }
 }

ordianal()

enum ์ƒ์ˆ˜๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ •์˜๋œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜(int)ํ•˜๋Š” ํ•จ์ˆ˜

public class example {
    public static void main(String[] args) {
        Money dollar = Money.DOLLAR;

        System.out.println(dollar.ordinal()); //0
    }
 }

ordinal์€ Enum์„ ์ •์˜ํ•œ ์ˆœ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— c๋•Œ์ฒ˜๋Ÿผ ์ƒ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.

ordinal์€ EnumSet์ด๋‚˜ EnumMap, JPA์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ• ์ผ์ด ์—†๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

์ •์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๊ฐ’์ด ์ถ”๊ฐ€ ๋˜๋ฉด ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ ๋กœ Spring Data JPA์—์„œ default๋Š” ordinal์ด๊ธฐ ๋•Œ๋ฌธ์— Enum์ˆœ์„œ๊ฐ€ ๋ฐ”๋€๋‹ค๋ฉด ๊ฐ’์ด ์•„์˜ˆ ๋‹ฌ๋ผ์ง„๋‹ค. ์ปฌ๋Ÿผ์œผ๋กœ Enum์„ ์‚ฌ์šฉํ•˜๋ฉด @Enumerated๋ฅผ ์ด์šฉํ•ด String์œผ๋กœ ์‚ฌ์šฉํ•˜์ž.

java.lang.Enum

enum ํด๋ž˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ java.lang.Enum๋ผ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๊ณ  ์žˆ๊ณ  ์ด๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๊ณ  Comparable๊ณผ Serializable๋ฅผ implementsํ•˜๊ณ  ์žˆ๋‹ค.

protected Enum(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
}

protectedํ˜•์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด enum ํ‚ค์›Œ๋“œ์— ๋ฐ˜์‘ํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

public String toString() {
    return name;
}

์ด ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” public ๋ฉ”์†Œ๋“œ ์ค‘ Overrideํ•ด์„œ ์‚ฌ์šฉํ• ๋งŒํ•œ ๋ฉ”์„œ๋“œ๋กœ ๊ธฐ๋ณธ์€ ์ƒ์ˆ˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, enum์„ ์ƒ์„ฑ์‹œ ์ถ”๊ฐ€ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ์ด๋ฅผ Overrideํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ปดํŒŒ์ผ ์‹œ์˜ ๊ฐ์ฒด ์ƒ์„ฑ

final class Money extends Enum<Money> {
	private Money(String name, int ordinal) {
		super(name, ordinal);
	}

	public static final Status DOLLAR = new Status("DOLLAR", 0);
	public static final Status WON = new Status("WON", 1);
	public static final Status POUND = new Status("POUND", 2);
    public static final Status EURO = new Status("EURO", 3);
    public static final Status YEN = new Status("YEN", 4);


	private static final Status ENUM$VALUES[] = { DOLLAR, WON, POUND, EURO, YEN };
}

enum ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๊ฑฐํ˜•์„ ์ƒ์„ฑํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์— ์œ„์™€ ๊ฐ™์ด ์ •์˜๊ฐ€ ๋œ๋‹ค.

EnumSet

Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„

EnumSet์€ abstractํ‚ค์›Œ๋“œ๊ฐ€ ์•ž์— ๋ถ™์–ด ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  of()์™€ ๊ฐ™์€ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” noneOf(class<E> elementType) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
        Enum<?>[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");

        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

noneOf() ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ EnumSet ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋“ค์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.

์ด ๋‘˜ ํด๋ž˜์Šค ๋ชจ๋‘ private์†์„ฑ์ด๋ฏ€๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • ์‚ฌ์šฉํ•  ํฌ๊ธฐ์— ๋งž๊ฒŒ ์ ํ•ฉํ•œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๊ณจ๋ผ ์ค€๋‹ค.

  • Enum์˜ ์ƒ์ˆ˜๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ Set์— ๋‹ด๋Š” ํ–‰์œ„๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • EnumSet ๋‚ด๋ถ€ ํ‘œํ˜„์€ ๋น„ํŠธ ๋ฒกํ„ฐ๋กœ ํ‘œํ˜„๋œ๋‹ค. (์ƒ์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ 64๊ฐœ ์ดํ•˜๋ผ๋ฉด long๋ณ€์ˆ˜ ํ•˜๋‚˜๋กœ ํ‘œํ˜„ํ•œ๋‹ค.)

  • Enum ์ƒ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์ˆœ์„œ, ์ฆ‰ ordinal() ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๋œ ์ˆœ์„œ๋กœ ์ˆœํšŒํ•œ๋‹ค.

  • EnumSet iterator๋Š” ์•ฝํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ConcurrentModificationException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

  • null ์š”์†Œ๋Š” ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋™๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์„œ๋“œ

  • EnumSet.allOf(Class elementType) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•œ EnumSet์„ ๋ฐ˜ํ™˜

  • EnumSet.noneOf(Class elementType) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์˜ ๋น„์–ด์žˆ๋Š” EnumSet๋ฐ˜ํ™˜

  • EnumSet.of(E e1, E e2 ...) : ์ง€์ •ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ EnumSet์„ ๋ฐ˜ํ™˜

  • ๊ทธ ์™ธ java.util.AbstractSet, java.util.AbstractCollection, java.lang.Object, java.util.Set์œผ๋กœ ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ๋“ค์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค.

    • ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ equals(),hashCode() ,add(),remove(),size(), toArray() => Object[] ๋ฐ˜ํ™˜, iterator()๋“ฑ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

EnumMap

Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„

  • Enum์„ Key๋กœ ์ด์šฉํ•˜๋Š” Map์ด๋‹ค.

  • Enum ์ƒ์ˆ˜๋กœ null์„ ๊ฐ–์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— null์„ key๋กœ ๊ฐ–์ง€ ๋ชปํ•œ๋‹ค.

  • Enum์€ ์ •ํ•ด์ง„ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹จ์ผ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹ฑํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ์–ด ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.

  • key์™€ value๊ฐ€ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

  • EnumMap์˜ key๋Š” ordianl๋กœ ๊ด€๋ฆฌ ๋˜๊ธฐ ๋•Œ๋ฌธ์— iterator๋Š” ์•ฝํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ConcurrentModificationException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

  • ๋™๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์„œ๋“œ

  • ์ƒ์„ฑ์ž : newํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ์ผ๋ฐ˜ Map๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ enum ํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    • Map<Money,Integer> map = new EnumMap<>(Money.class);

  • clear() : ๋ชจ๋“  ์š”์†Œ ์‚ญ์ œ

  • get(Object key) : key์— ํ•ด๋‹นํ•˜๋Š” value ๋ฆฌํ„ด

  • put(K key, V value) : map์— ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

  • remove(Object key) : ํ•ด๋‹นํ•˜๋Š” key๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ญ์ œ

  • equals(Object object) : ๊ธฐ์ค€ Map๊ณผ ๊ฐ™์€์ง€ ๋น„๊ต

  • containsKey(Object key) / containsValue(Object value) : ํ•ด๋‹นํ•˜๋Š” key์™€ value ๊ฐ€ ์žˆ๋‹ค๋ฉด true ๋ฐ˜ํ™˜

  • size() : Map์˜ ์š”์†Œ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

  • keySet() : Map์— ์žˆ๋Š” ๋ชจ๋“  key๋“ค์˜ Set view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ชจ๋“  key๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.)

  • values() : Map์— ์žˆ๋Š” value๋“ค์˜ Collection view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (๋ชจ๋“  ๊ฐ’๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.)

์ถ”๊ฐ€ ๋‚ด์šฉ

type safety

Runtime์ด ์•„๋‹Œ Complieํƒ€์ž„์— ๋ฌธ์ œ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ JVM์€ ์ปดํŒŒ์ผํ• ๋•Œ, ํŠน์ • ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋‚˜ RUN์‹œ์— ํŠน์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Enum์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํƒ€๋ฐฉ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ปดํŒŒ์ผํƒ€์ž„์— ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊น…๋„ ์‰ฌ์›Œ์ง„๋‹ค.

Enum์—์„œ ๊ฐ’ ์…‹ํŒ… ํŒ

Enum์˜ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ค„ ๋•Œ 1,2,3๊ฐ™์ด ์ข์€ ์ˆซ์ž์˜ ๋ฒ”์œ„๊ฐ€ ์•„๋‹Œ 10,20,30 ๊ฐ™์ด ๋ฒ”์œ„๋ฅผ ๋‘๊ณ  ์„ ์–ธํ•ด์ฃผ์ž.

์–ธ์ œ ์–ด๋–ค์ด์œ ์—์„œ Enum์— ๊ฐ’์„ ์‚ฌ์ด์— ์ถ”๊ฐ€ ํ•ด์ค„์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Reference

https://www.nextree.co.kr/p11686/

http://cris.joongbu.ac.kr/course/java/api/java/lang/Enum.html

https://javarevisited.blogspot.com/2014/03/how-to-use-enumset-in-java-with-example.html#axzz6kSbFjAwM

Previous๋ฐ์ดํ„ฐ ํƒ€์ž…Nextjvm

Last updated 3 years ago

enum
in
out