Enum์ด๋ž€?

J_Eddyยท2021๋…„ 12์›” 23์ผ
0

๐Ÿ“Œ Enum?

์ธํ„ด์‹ญ ํ™œ๋™์—์„œ Spring Boot๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋‹น์‹œ ํšŒ์›ํ…Œ์ด๋ธ”์— Id, Name, Gender, Role ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜์˜€๋‹ค. ์‚ฌ์ˆ˜๋ถ„๊ป˜์„œ Gender์™€ Role๊ณผ ๊ฐ™์€ ์ž˜ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์€ Enum์„ ํ™œ์šฉํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•˜์…”์„œ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค.

Enum์ด๋ž€ ๊ด€๋ จ์ด ์žˆ๋Š” ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค. ์ƒ์ˆ˜๋ผ ํ•˜๋ฉด final์ด๋‚˜ String๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž์—ด์„ ๊ณ ์ •ํ•œ ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค. ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ํ•ด๋‹น ์ƒ์ˆ˜๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค๋ฉด, ๊ตณ์ด Class๋กœ ์ž‘์„ฑํ•˜์ง€์•Š๊ณ  Enum์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ 'ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์ƒ์ˆ˜๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค' ๋ผ๋Š”๊ฒƒ์„ ๋ช…์‹œํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•

1. ์ƒ์„ฑ์ž

Enum์˜ ์ƒ์„ฑ์ž๋Š” private์ด๋‹ค. Enum์€ ์ƒ์„ฑ์ž๊ฐ€ ํด๋ž˜์Šค ๋กœ๋“œ๋˜๋Š” ์‹œ์ ์—์„œ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— public์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Compile์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

2. ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

์•„๋ž˜ ์ฝ”๋“œ๋Š” Role์˜ Enumํด๋ž˜์Šค์ด๋‹ค. @Getter ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ privateํ•˜๊ฒŒ ์ƒ์„ฑ์ž๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ํ•ด๋‹น ์ƒ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” map์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๊ด„ํ˜ธ์—ด๊ณ  ์ด๋ฆ„๊ณผ value๋ฅผ ์จ์ฃผ๋ฉฐ ๋œ๋‹ค.

@Getter
@AllArgsConstructor
public enum Role {
    ROLE_ADMIN("ROLE_ADMIN", "๊ด€๋ฆฌ์ž"),
    ROLE_MEMBER("ROLE_MEMBER", "ํšŒ์›");

    private final String value;
    private final String title;

}

3. Thymeleaf์™€ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉ

ํšŒ์›๊ฐ€์ž…์„ ์ง„ํ–‰ํ•  ๋•Œ Enum๊ณผ Thymeleaf๋ฅผ ์ด์šฉํ•˜์—ฌ ๋“œ๋กญ๋‹ค์šด ํ˜•์‹์œผ๋กœ Gender๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. ๋จผ์ € ํ•ด๋‹น Enum์„ ๊ตฌ์„ฑํ•˜์˜€๊ณ  Thymeleaf์˜ T๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ Enumํด๋ž˜์Šค์˜ Value๊ฐ’๋“ค์„ ๋ถˆ๋Ÿฌ์™€ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
์ฒ˜์Œ์—๋Š” Enum์—์„œ ๋ฐ”๋กœ ๋นผ์˜ค์ง€ ์•Š๊ณ  Dto์—์„œ ํ•ด๋‹น Gender๋ฅผ ๊ฐ€์ ธ์™”๋‹ค. ์ด๋ ‡๊ฒŒ ๋  ๊ฒฝ์šฐ Dto์—๋Š” Male, Female์ฒ˜๋Ÿผ ์˜์–ด๋กœ ๋˜์–ด์žˆ์—ˆ๊ณ  JS์—์„œ convert๋ฅผ ํ•ด์ค˜์•ผ ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. Enum์„ ์‚ฌ์šฉํ•˜๊ณ  Html์— ๊ตฌํ˜„ํ•  ๋•Œ ์ผ์ผํžˆ ์„ฑ๋ณ„์„ ์ž…๋ ฅ ํ•  ํ•„์š”์—†์ด ์ƒ์ˆ˜ํด๋ž˜์Šค์ธ Enum์„ ํ†ตํ•ด ๊ณ ์ •๋œ ๊ฐ’์„ ๋ธ”๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
Enum

@Getter
@AllArgsConstructor
public enum Gender {
    Male("Male", "๋‚จ์ž"),
    Female("Female", "์—ฌ์ž");

    private final String value;
    private final String title;
}

HTML

<div class="mb-3">
        <label class="form-label" for="gen">์„ฑ๋ณ„</label>
        <div class="dropdown" id="gen">
            <select onkeyup="checkGender()" class="form-control" id="gender" name="gender">
                <option value="">์„ฑ๋ณ„</option>
                <option th:each="genderValue : ${T(com.example.CUSHProject.enums.Gender).values()}"
                        th:value="${genderValue.value}"
                        th:text="${genderValue.title}"></option>
            </select>
        </div>
    </div>
profile
๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ฌ๊ณ ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€