2021. 6. 20. 21:35ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Java
Enum์ด๋?
์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ์ด๊ฑฐํ(enumerated type, enumeration), ์ด๋(enum), ํฉํฐ(factor โ R ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํต๊ณํ์ ๋ฒ์ฃผํ ๋ณ์์์ ๋ถ๋ฅด๋ ๋ช ์นญ)๋ ์์, ๋ฉค๋ฒ๋ผ ๋ถ๋ฆฌ๋ ๋ช ๋ช ๋ ๊ฐ์ ์งํฉ์ ์ด๋ฃจ๋ ์๋ฃํ์ธ ๊ฒ์ด์์.
์ด๊ฑฐ์ ์ด๋ฆ๋ค์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ์ธ์ด์ ์์ ์ญํ ์ ํ๋ ์๋ณ์์ด์ง์.
์ผ๋ถ ์ด๊ฑฐ์ ์๋ฃํ์ ์ธ์ด์ ๊ธฐ๋ณธ ์์๋์ด ์์ ์ ์๋ ๊ฒ์ด์์. ๋ถ๋ฆฌ์ธ ์๋ฃํ์ ์๋ก ๋ค๋ฉด ๊ฑฐ์ง(False)๊ณผ ์ฐธ(True)์ ๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ์ด๊ฑฐํ์ผ๋ก ๋ณผ ์ ์์ง์. ์๋ง์ ์ธ์ด๋ ์ฌ์ฉ์๋ค์ด ์๋ก์ด ์ด๊ฑฐํ์ ์ ์ํ ์ ์๊ฒ ํ๊ณ ์๋ต๋๋ค.
์ด๊ฑฐํ์ ๊ฐ๊ณผ ๋ณ์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ์ ๊ธธ์ด์ ๋นํธ ๋ฌธ์์ด๋ก ๊ตฌํ๋๋ฉฐ, ์ด๋ ์ผ๋ถ ์ ์ํ๊ณผ ํธํ๋๋ ํฌ๋งท๊ณผ ํฌ๊ธฐ๋ก ๋์ด ์๋ต๋๋ค. ํนํ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ ์ผ๋ถ ์ธ์ด๋ค์ ์ฌ์ฉ์๊ฐ ๊ฐ๊ฐ์ ์ด๊ฑฐ์๋ฅผ ์ํด ์ฌ์ฉํ ๋นํธ ๊ฒฐํฉ์ ์ง์ ํ ์ ์๊ฒ ํ๋ ๊ฒ์ด์์.
์งง๊ฒ ์ ๋ฆฌํ์๋ฉด '์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ'์ด๋ผ๊ณ ํ ์ ์๋ต๋๋ค.
enum์ Class, Interface์ ๋๊ธ์ ํ์์ ๊ฐ์ง๋ ๋จ์์ธ ๊ฒ์ด์์. ํ์ง๋ง, enum์ ์ฌ์ค Class๋ผ๊ณ ๋ด์ผ ํ๋ต๋๋ค.
ํธ์๋ฅผ ์ํด enum๋ง์ ์ํ ๋ฌธ๋ฒ์ ํ์์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด enum์ด๋ผ๋ Key Word๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์์.
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 Fruit{
APPLE, PEACH, BANANA;
}
์์ ์๋ ์ฝ๋๋ ๊ฐ์ ๋ด์ฉ์ธ ๊ฒ์ด์์.
class Fruit{
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
private Fruit(){}
}
๊ธฐ๋ณธ ์์ฑ์์ ์ ๊ทผ ์ ์ด์๊ฐ Private์ธ ๊ฒ์ด ๋ณด์ด์๋์?
๊ทธ๊ฒ์ด Class Fruit๋ฅผ ์ธ์คํด์ค๋ก ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ต๋๋ค. ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ธ์งํ๋ ๊ฒ์ด์์.
์๋ ์ฝ๋๋ ์ปดํ์ผ ์ Exception์ด ๋ฐ์ํ ๊ฒ์ด์์.
if(Fruit.APPLE == Company.APPLE){
System.out.println("๊ณผ์ผ ์ ํ๊ณผ ํ์ฌ ์ ํ์ด ๊ฐ๋ค.");
}
์๋ํ๋ฉด? enum์ด ์๋ก ๋ค๋ฅธ ์์ Group์ ๋ํ ๋น๊ต๋ฅผ ์ปดํ์ผ ์์ ์์ ์ฐจ๋จํ๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ด์์.
โ Enum๊ณผ ์์ฑ์
enum์ ์ฌ์ค Class์ธ ๊ฒ์ด์์. ๋๋ฌธ์ ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์๋ต๋๋ค!
enum Fruit{
APPLE, PEACH, BANANA;
Fruit(){
System.out.println( "Call Constructor " + this );
}
}
// ๊ฒฐ๊ณผ
Call Constructor APPLE
Call Constructor PEACH
Call Constructor BANANA
57 kcal
Call Constructor๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ ์์ฑ์ Fruit๊ฐ ํธ์ถ๋์์์ ์๋ฏธํ๋ ๊ฒ์ด์์. ์ด๊ฒ์ด 3๋ฒ ํธ์ถ๋์๋ค๋ ๊ฒ์?
ํ๋(์ธ์คํด์ค ๋ณ์)์ ์ซ์๋งํผ ํธ์ถ๋์๋ค๋ ์๋ฏธ๋๋๋ค. ๋ฐ๋ผ์ enum์ ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฒ์ด์์.
ํ์ง๋ง, ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ปดํ์ผ ์ ์๋ฌ๊ฐ ๋๋ ๊ฒ์ด์์.
enum Fruit{
APPLE, PEACH, BANANA;
public Fruit(){
System.out.println( "Call Constructor " + this );
}
}
์ด๊ฒ์ enum์ ์์ฑ์๊ฐ ์ ๊ทผ ์ ์ด์ 'Private๋ง์ ํ์ฉ' ํ๊ธฐ ๋๋ฌธ์ด๋๋๋ค.
๊ทธ๋์ Fruit๋ฅผ ์ง์ ์์ฑํ ์๊ฐ ์๋ ๊ฒ์ด์์. ๊ทธ๋ ๋ค๋ฉด ์ด ์์ฑ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ธ์คํด์ค ๋ณ์(APPLE...)์ ๊ฐ์ ๋ถ์ฌํ ์ ์๋ค๋ ๋ง์ธ ๊ฒ์ด์์.
enum Fruit{
APPLE("red"), PEACH("pink"), BANANA("yellow");
public String color;
Fruit(String color){
System.out.println( "Call Constructor " + this );
this.color = color;
}
}
public class ConstantDemo {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch(type){
case APPLE:
System.out.println( 57 + " kcal, " + Fruit.APPLE.color );
break;
case PEACH:
System.out.println( 34 + " kcal " + Fruit.PEACH.color );
break;
case BANANA:
System.out.println( 93 + " kcal"+Fruit.BANANA.color );
break;
}
}
}
/* ์คํ ๊ฒฐ๊ณผ
Call Constructor APPLE
Call Constructor PEACH
Call Constructor BANANA
57 kcal, red
*/
์๋ ์ฝ๋๋ Fruit ์ ์์๋ฅผ ์ ์ธํ๋ฉด์๋ ๋์์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด์์.
APPLE("red"), PEACH("pink"), BANANA("yellow");
enum์ Method๋ฅผ ๊ฐ์ง ์ ์๋ต๋๋ค. ์๋ ์ฝ๋๋ ์ด์ ์์ ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ด์์.
enum Fruit {
APPLE("red"), PEACH("pink"), BANANA("yellow");
private String color;
Fruit( String color ) {
System.out.println( "Call Constructor " + this );
this.color = color;
}
String getColor(){
return this.color;
}
}
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;
}
}
}
enum์ 'Member ์ ์ฒด๋ฅผ ์ด๊ฑฐ ํ ์ ์๋ ๊ธฐ๋ฅ'๋ ์ ๊ณตํ๋ต๋๋ค.
public class ConstantDemo {
public static void main(String[] args) {
for(Fruit f : Fruit.values()){
System.out.println( f + ", " + f.getColor() );
}
}
}
์ ๋ฆฌํ๊ฒ ์ต๋๋ค!
์ด๊ฑฐํ์ '์ฐ๊ด๋ ๊ฐ๋ค์ ์ ์ฅ'ํ๊ณ , ๊ทธ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด์์. ๋ํ, ์ด๊ฑฐํ ์์ฒด๊ฐ Class์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฑฐํ ๋ด๋ถ์ ์์ฑ์, ์ธ์คํด์ค ๋ณ์, Method๋ฅผ ๊ฐ์ง ์ ์์ด ๋จ์ํ ์์๊ฐ ์๋๋ผ ๋ ๋ง์ ์ญํ ์ ํ๋ ์น๊ตฌ๋๋๋ค!
๋ณธ ๋ด์ฉ์ ์คํ๋ํ ๋ฆฌ์ผ์ฆ๋ฅผ ๊ณต๋ถํ๋ฉฐ, ์ ๋ฆฌํ์์์ ์๋ ค๋๋ฆฝ๋๋ค.
https://opentutorials.org/course/2517/14151
์ด๊ฑฐํ(enum) - ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ
enum์ ์ด๊ฑฐํ(enumerated type)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๊ฑฐํ์ ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ์ด๋ผ๊ณ ํ ์ ์๋ค. package org.opentutorials.javatutorials.constant2; enum Fruit{ APPLE, PEACH, BANANA; } enum Company{ GOOGLE, AP
opentutorials.org
์ถ๊ฐ ์ฐธ๊ณ ์๋ฃ
https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html
Java Enum ํ์ฉ๊ธฐ - ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
์๋ ํ์ธ์? ์ฐ์ํ ํ์ ๋ค์์ ๊ฒฐ์ /์ ์ฐ ์์คํ ์ ๊ฐ๋ฐํ๊ณ ์๋ ์ด๋์ฑ์ ๋๋ค.์ด๋ฒ ์ฌ๋ด ๋ธ๋ก๊ทธ ํฌ์คํ ์ฃผ์ ๋ก ์ ๋ Java Enum ํ์ฉ ๊ฒฝํ์ ์ ํํ์์ต๋๋ค. ์ด์ ์ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ Enum์ ๊ดํด
woowabros.github.io
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค!
'๊ฐ๋ ์ ๋ฆฌ ์์ ์ค > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ํจ์ํ ์ธํฐํ์ด์ค (0) | 2021.06.21 |
---|---|
[Java] Lamda Function (0) | 2021.06.21 |
[Java] ํด๋์ค, ์์, getter, setter, ํ๋ณํ, super, ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ฉํ ์์ (0) | 2021.03.16 |
[Java] Class์ ๋ํ์ฌ (๋ฏธ์์ฑ) (0) | 2021.03.15 |
[Java] ํค๋ณด๋์์ ์ ๋ ฅ๋ ๋ฌธ์์ด์ ์ ์๋ก ๋ฐ๊พผ ๋ค ๊ทธ ๊ฐ์ ์ดํฉ๊ณผ ํ๊ท ๊ตฌํ๊ธฐ (0) | 2021.03.08 |