Post

[Java] Enum ํƒ€์ž…

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ƒํƒœ ์ฝ”๋“œ๋‚˜ ๋ถ„๋ฅ˜์ฒ˜๋Ÿผ ์ •ํ•ด์ง„ ๊ฐ’์˜ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃฐ ๋•Œ, ์˜ˆ์ „์—๋Š” final ์ƒ์ˆ˜๋ฅผ ๋‚˜์—ดํ•ด์„œ ์ผ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ์“ฐ๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ , ๊ด€๋ จ๋œ ๊ฐ’๋“ค์„ ํ•œ๋ฐ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด Enum์ด๋‹ค.

Enum์ด๋ž€? โ€œEnumeration(์—ด๊ฑฐ)โ€์˜ ์•ฝ์ž. ๋กœ์ง๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ด๊ฑฐํ•œ ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ž๋ฐ”์—์„œ ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋„๋งก๋Š”๋‹ค.


1. ๊ณผ๊ฑฐ์˜ ์ƒ์ˆ˜ ์ฒ˜๋ฆฌ

์˜ˆ์ „์—๋Š” final ์ œ์–ด์ž๋กœ ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

1
2
3
4
5
6
7
class PastFinal {
    private final static int ONE = 1;

    public static void main(String[] args) {
        System.out.println(PastFinal.ONE);
    }
}

โš ๏ธ ์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ์“ฐ๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ , ๊ด€๋ จ ์ƒ์ˆ˜๋“ค์„ ์บก์Аํ™”ํ•  ์ˆ˜ ์—†๋‹ค. โ€œ์ด ์ƒ์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์„ ์ˆ˜ ์—†์„๊นŒ?โ€์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด Enum์ด๋‹ค.


2. Enum ์„ ์–ธ

๊ฐ ์ƒ์ˆ˜์— ์ฝ”๋“œ์™€ ์„ค๋ช…์„ ํ•จ๊ป˜ ๋งคํ•‘ํ•˜๋Š” Enum์„ ๋งŒ๋“ค์–ด ๋ณด์ž.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// OutputType.java
public enum OutputType {

    INSPEC ("01", "์ ๊ฒ€ ์ค‘"),
    SUCCESS("02", "์ •์ƒ ์ข…๋ฃŒ"),
    FAIL   ("03", "์ฒ˜๋ฆฌ ์˜ค๋ฅ˜"),
    SB     ("04", "๋ฐ˜์†ก"),
    HW     ("05", "์ˆ˜์ž‘์—…(์žฌํ• ๋‹น)"),
    UNKNOWN("",   "unknown");

    OutputType(String code, String description) {   // ์ƒ์„ฑ์ž
        this.code = code;
        this.descriptions = description;
    }

    private final String code;
    private final String descriptions;

    public String getCode()         { return code; }
    public String getDescriptions() { return descriptions; }

    // ์ฝ”๋“œ๋กœ Enum ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š” ๋ฉ”์†Œ๋“œ
    public static OutputType getByCode(String code) {
        for (OutputType type : OutputType.values()) {
            if (type.getCode().equalsIgnoreCase(code)) {
                return type;
            }
        }
        return OutputType.UNKNOWN;
    }
}

๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋œฏ์–ด๋ณด๋ฉด ์ด๋ ‡๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ์—ญํ• 
INSPEC("01","์ ๊ฒ€ ์ค‘")๊ฐ Enum ๊ฐ์ฒด ์„ ์–ธ (์ƒ์„ฑ์ž ์ธ์ž = ์ฝ”๋“œ, ์„ค๋ช…)
private final String code, descriptions๊ฐ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์งˆ ํ•„๋“œ
์ƒ์„ฑ์ž OutputType(...)์ฝ”๋“œยท์„ค๋ช…์„ ํ•„๋“œ์— ๋งคํ•‘
getCode() / getDescriptions()๋งคํ•‘๋œ ๊ฐ’์„ ๊บผ๋‚ด๋Š” Getter
getByCode(code)์ฝ”๋“œ๋กœ ํ•ด๋‹น Enum ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜

๐Ÿ’ก values()๋Š” Enum์— ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ, ๊ทธ Enum์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋Œ๋ ค์ค€๋‹ค. getByCode()๋Š” ์ด๊ฑธ ์ˆœํšŒํ•˜๋ฉฐ getCode()๋กœ ๋น„๊ตํ•ด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


3. Enum ์‚ฌ์šฉ

์‚ฌ์šฉ์€ ์•„์ฃผ ์‰ฝ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
// ์ฝ”๋“œ ์ถœ๋ ฅ
System.out.println(OutputType.INSPEC.getCode());
// โ†’ 01

// ์„ค๋ช… ์ถœ๋ ฅ
System.out.println(OutputType.INSPEC.getDescriptions());
// โ†’ ์ ๊ฒ€ ์ค‘

// ์ฝ”๋“œ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์„ค๋ช… ์ถœ๋ ฅ
OutputType findType = OutputType.getByCode("03");
System.out.println(findType.getDescriptions());
// โ†’ ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜
์š”์ฒญ์ฝ”๋“œ๊ฒฐ๊ณผ
INSPEC์˜ ์ฝ”๋“œOutputType.INSPEC.getCode()01
INSPEC์˜ ์„ค๋ช…OutputType.INSPEC.getDescriptions()์ ๊ฒ€ ์ค‘
์ฝ”๋“œ 03์˜ ์„ค๋ช…getByCode("03").getDescriptions()์ฒ˜๋ฆฌ ์˜ค๋ฅ˜

๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
Enum
โ”œโ”€ ๊ฐœ๋…   ์ •ํ•ด์ง„ ๊ฐ’์˜ ์ง‘ํ•ฉ์„ ์บก์Аํ™”ํ•œ ์ƒ์ˆ˜ ํƒ€์ž…
โ”œโ”€ ์„ ์–ธ   ๊ฐ์ฒด๋งˆ๋‹ค ์ฝ”๋“œยท์„ค๋ช… ๋“ฑ ํ•„๋“œ๋ฅผ ์ƒ์„ฑ์ž๋กœ ๋งคํ•‘
โ”œโ”€ ๊ธฐ๋ณธ   values()๋กœ ์ „์ฒด ๊ฐ์ฒด ์ˆœํšŒ ๊ฐ€๋Šฅ
โ””โ”€ ํ™œ์šฉ   getByCode() ๊ฐ™์€ ์ •์  ๋ฉ”์†Œ๋“œ๋กœ ์ฝ”๋“œโ†”๊ฐ์ฒด ๋ณ€ํ™˜
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
Enum๊ด€๋ จ ์ƒ์ˆ˜๋ฅผ ํ•„๋“œยท๋ฉ”์†Œ๋“œ์™€ ํ•จ๊ป˜ ๋ฌถ์€ ํƒ€์ž…
values()Enum์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ
getByCode ํŒจํ„ด์™ธ๋ถ€ ์ฝ”๋“œ๊ฐ’์„ Enum ๊ฐ์ฒด๋กœ ๋งคํ•‘

Enum์€ ๋‹จ์ˆœํ•œ ์ƒ์ˆ˜ ๋‚˜์—ด์„ ๋„˜์–ด, ๊ฐ’๊ณผ ๊ทธ์— ๋”ธ๋ฆฐ ๋ฐ์ดํ„ฐยท๋™์ž‘์„ ํ•˜๋‚˜๋กœ ์บก์Аํ™”ํ•œ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ ๊ด€๋ฆฌ์ฒ˜๋Ÿผ โ€œ์ •ํ•ด์ง„ ๊ฐ’์˜ ์ง‘ํ•ฉโ€์„ ๋‹ค๋ฃฐ ๋•Œ final ์ƒ์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ์•ˆ์ „ํ•˜๊ณ  ํ‘œํ˜„๋ ฅ์ด ์ข‹๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.