Bibi's DevLog ๐ค๐
[Java] enum (์ด๊ฑฐํ) ๋ณธ๋ฌธ
์๋ฐ enum
์ด ๊ธ์ '์๋ฐ์ ์ ์' ๋ฐ ๊ตฌ๊ธ๋ง, ์์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
enum (์ด๊ฑฐํ) ์ด๋?
: ์๋ก ์ฐ๊ด๋ ์ฌ๋ฌ ์์๋ฅผ ์ ์ํ ์ ์๋ ์๋ฃํ(ํด๋์ค).
java.lang.Enum
ํด๋์ค๊ฐ ๋ชจ๋ enum์ ์กฐ์ ํด๋์ค์ด๋ค.์์๋ค์ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ํ์ ๊น์ง ๊ด๋ฆฌํ ์ ์๋ค.
enum์ ํน์ง
- enum์ ์์ฑ์๋ ํญ์ private์ด๋ค. ์ฆ, enum์ ์์ฑ์๋ ๋ด๋ถ์ ์ผ๋ก private์ผ๋ก ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋ค.
- ์ฐ๋ฆฌ๊ฐ enum ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ฒ ์๋ JVM์ด ์ง์ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ.
๊ฐ์ ๋ฐ๊ฟ ์ ์๊ฒ ํ๊ธฐ ์ํด ์์ฑ์๊ฐ ํญ์ private์ด๋ค.
- ์ฐ๋ฆฌ๊ฐ enum ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ฒ ์๋ JVM์ด ์ง์ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ.
- enumํด๋์ค์ enum์์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ธ์คํด์ค ๋ณ์๋ ๋ณดํต
final
์ด์ด์ผ ํ๋ค. - ๊ฐ์ enumํ์ ๋ผ๋ฆฌ๋ง ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
enum ์ ์ธํ๊ธฐ
enum enum๋ช { ์์1์ด๋ฆ, ์์2์ด๋ฆ, ... }
์ ๊ฐ์ด ์ ์ธํ๋ค.- ๊ธฐ๋ณธ์ ์ผ๋ก
์์1์ด๋ฆ์ ์์
= 0,์์2์ด๋ฆ์ ์์
= 1 .. ๋ก ํ ๋น๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก
enum enum๋ช { ์์1์ด๋ฆ(์์1๊ฐ), ์์2์ด๋ฆ(์์2๊ฐ) ... ; }
์ฒ๋ผ enum์์์ ๊ฐ์ ์ง์ ํ ์ ์๋ค.- ๊ฐ์ ์ง์ ํ ๊ฒฝ์ฐ ๋ง์ง๋ง ์์์
;
๋ฅผ ๋ถ์ฌ์ผ ํ๋ค.
- ๊ฐ์ ์ง์ ํ ๊ฒฝ์ฐ ๋ง์ง๋ง ์์์
enum enum๋ช { ์์1์ด๋ฆ(์์1๊ฐ1, ์์1๊ฐ2), ์์2์ด๋ฆ(์์2๊ฐ1, ์์2๊ฐ2) ... ; }
์ฒ๋ผ enum์์์ ์ฌ๋ฌ ๊ฐ์ ์ง์ ํ ์๋ ์๋ค.๊ฐ1
,๊ฐ2
๋ฅผ ๋ฐ๊ธฐ ์ํ enum ์ธ์คํด์ค๋ณ์์ ์์ฑ์๋ฅผ ์ถ๊ฐํด ์ฌ์ฉํ๋ค.โป enum์์๋ค์ ๋ชจ๋ ์ ์ํ ๋ค์์ ๋ค๋ฅธ ๋ฉค๋ฒ๋ค์ ์ถ๊ฐํด์ผ ํ๋ค.
๋ณดํต ์๋์ ๊ฐ์ ํฌ๋งท์ผ๋ก enumํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
public enum Color { // enumํด๋์ค ์ ์ธ
WHITE("white", 0), BLACK("black", 1); // enum์์์ ๊ฐ ์์๊ฐ ํ ๋น
private final String value; // enum์์๊ฐ์ ๋ฃ๊ธฐ ์ํ ์ธ์คํด์ค๋ณ์
private final int index;
Color(String color, int number) { // enum์์๊ฐ์ ์ ์ฅํ๋ ์์ฑ์
this.value = color;
this.index = number;
}
public String getValue() { // ์ธ๋ถ์์ value๋ฅผ ์ป์ ์ ์๊ฒ ํ๋ getter
return value;
}
public int getIndex() {
return index;
}
}
- ๋ค๋ฅธ ํด๋์ค์์๋ ๊ทธ enum์ ์ฌ์ฉํ๋ค๋ฉด ์์ ๊ฐ์ด enumํด๋์ค๋ฅผ ๋ฐ์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- ๋ฐ๋ฉด ํด๋น ํด๋์ค์์๋ง ๊ทธ enum์ ์ฌ์ฉํ๋ค๋ฉด enumํด๋์ค๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ์ ์ธํ๋ค.
enum ์ฌ์ฉํ๊ธฐ
enum๋ช
.์์๋ช
์ ๊ฐ์ด ์ฌ์ฉํ๋ค.
(ํด๋์ค์ static๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋์ผํจ)
enum์ ์ฅ์
์๋ฐ์ ์ด๊ฑฐํ์ Type-safeํ๋ค.
์ฆ, ์ค์ ๊ฐ์ ๊ฐ์๋ ํ์ ์ด ๋ค๋ฅด๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.์์๋ก ์ ์ธํ๋ฉด ์์๊ฐ ๋ฐ๋์์ ๋, ๊ทธ ์์๋ฅผ ์ฐธ์กฐํ ๋ชจ๋ ์์ค๋ฅผ ๋ค์ ์ปดํ์ผํด์ผ ํ๋ค.
๋ฐ๋ฉด enum์ผ๋ก ์ ์ธํ ์์๋ enum๋ง ๋ค์ ์ปดํ์ผํ๋ฉด ๋๋ค.enum ์์ ๊ฐ ๋น๊ต์
==
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์equals()
๋ณด๋ค ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.>
.<
๋น๊ต์ฐ์ฐ์๋ ์ฌ์ฉํ ์ ์์ง๋งcompareTo()
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.compareTo()
: ๋ ๋น๊ต๋์์ด ๊ฐ์ผ๋ฉด 0, ์ผ์ชฝ์ด ํฌ๋ฉด ์์, ์ผ์ชฝ์ด ์์ผ๋ฉด ์์๋ฅผ ๋ฐํํจ.
๋ ๋์์ ์ฐจ์ด๋งํผ ์์/์์๋ฅผ ๋ฐํํจ.
switch์กฐ๊ฑด์์ enum์์๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋ค.
- ์ด ๋
enum๋ช .์์๋ช
์ด ์๋์์๋ช
๋ง ์ ๋๋ค.
- ์ด ๋
์์๋ฅผ ์ง์ ์ ์ธํด ์ฌ์ฉํ ๋์ ๋นํด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
์์๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค๋ฅผ ๋ช ํํ๊ฒ ํ ์ ์๋ค (์ญํ ๋ถ๋ฆฌ)
java.lang.Enum์ ๋ฉ์๋
values()
: enum์ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด์ ๋ด์ ๋ฐํํจ.valueOf(String name)
:name
๊ณผ ์ผ์นํ๋ enum์์๋ฅผ ๋ฐํํจ.valueOf(Class<T> enumType, String name)
: ์ง์ ํ enum์์name
๊ณผ ์ผ์นํ๋ enum์์๋ฅผ ๋ฐํํจ.name()
: enum์์์ ์ด๋ฆ์ ๋ฌธ์์ด๋ก ๋ฐํํจ.ordinal()
: enum์์๊ฐ ์ ์๋ ์์๋ฅผ ์ ์๋ก ๋ฐํํจ(0๋ถํฐ ์์).- ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข๋ค. ํนํ,
ordinal()
๊ฐ์ enum์์์ ๊ฐ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข๋ค.
- ์ฌ์ฉํ์ง ์๋ ๊ฒ ์ข๋ค. ํนํ,
enum์ ๋ด๋ถ๊ตฌ์กฐ
enum์ enum์์ ํ๋ํ๋๋ enum ๊ทธ ์์ ์ ๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ฅผ ๋ค์ด,
enum Fruit { APPLE, KIWI, GRAPE }
์ด ์ฝ๋๋ ์๋ ์ฝ๋์ ๊ฐ์ ๊ตฌ์กฐ์ด๋ค.
class Fruit {
static final Fruit APPLE = new Fruit("APPLE");
static final Fruit KIWI = new Fruit("KIWI");
static final Fruit GRAPE = new Fruit("GRAPE");
}
Fruitํด๋์ค์ static final ์์๋ค์ ๊ฐ์ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ด๊ณ , ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ==
๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.
enum ๊ธฐํ ์ง์
- DB์์ enum์ ์ฌ์ฉํ ๋๋
int
๋๋varchar
๋ก ์ ์ฅํด ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.
(MySQL์ ๊ฒฝ์ฐ)enumํ์ ์ด ๋ฐ๋ก ์์ง๋ง, ์ฌ์ฉํ์ง ์์์ผ ํ๋ค. ์ฐธ๊ณ - enum์ ValueObject์ ํด๋นํ๋ค.
'๐ฅ BE ๋ฐฑ์๋ > Java ์๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] try-with-resources ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ (0) | 2021.02.22 |
---|---|
[Java] Value Object (VO) ๊ฐ ๊ฐ์ฒด (0) | 2021.02.18 |
[Java] final (ํด๋์ค, ๋ฉ์๋, ๋ณ์, ์ธ์คํด์ค๋ณ์) (0) | 2021.02.18 |
[Java] this์ this() (0) | 2021.02.18 |
[Java] List ๋ฆฌ์คํธ = ArrayList ๋ก ์ ์ธํด ์ฌ์ฉํ๋ ์ด์ (2) | 2021.02.18 |