์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์๋ฐ์์
- builder null
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฒฉ๋ฆฌ์์ค
- ์ํฐ๋ ๊ฐ๋ฐ์ํ์ฌ
- Hikari Connection Pool
- ์๋ฐ์์์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
- hikari cp ์ค์
- item15
- mysql
- SVN
- ์๋ฐ๋ผ์ด๋ธ์คํฐ๋
- ์ดํํฐ๋ธ์๋ฐ
- effectiveJava
- ๋ฐ์ฉ๋ ์ค๊ตญ์ด
- ์๋ผ์คํฑ์์น๋ฉ์ธ์ง์ฉ๋
- ์์
- ์ธ๋ฑ์ค์คํต์ค์บ
- ์ํฐ๋ ๋ณ์ข ๊ฐ๋ฐ์
- ์์ดํ 15
- index skip scan
- ์๋ฐ์ฐ๋ ๋
- ๋น์ผ๊ฐ์ฒด์์ฑ
- ์ธ๋ฑ์คํ์ค์บ
- Item6
- index full scan
- mysql์ํคํ ์ฒ
- assert.notnull
- InnoDB์ํคํ ์ฒ
- ์๋ฐ
- enum ์์ฑ์ ์ ๊ทผ ์ ํ์
- Today
- Total
โ๐ป๊ธฐ๋กํ๋ ๋ธ๋ก๊ทธ
Enum ๋ณธ๋ฌธ
๐ ์๋ฐ ๋ผ์ด๋ธ ์คํฐ๋ 10์ฃผ ์ฐจ - Enum
1. Enum ์ถ์ฐ ์ด์
2. Enum ์ ์ํ๋ ๋ฐฉ๋ฒ
3. Enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
4. java.lang.Enum
5. EnumSet
์ด ๊ธ์ 23.05.07์ ์์ ๋์์ต๋๋ค.
1. Enum ์ถ์ฐ ์ด์
๊ณผ์ผ ๋ช ์ ์ซ์๋ฅผ ๋งค์นญํ์ฌ ๊ณผ์ผ์ ํด๋นํ๋ ์ฝ๋์ฒ๋ผ ์ฌ์ฉํ์๋ค.
์ฃผ์์ด ์์ด์ 1๋ฒ์ด ์ฌ๊ณผ์ธ๊ฑด ์์์ง๋ง ๋ง์ฝ ์ฃผ์์ด ์ง์์ง๊ฑฐ๋, ๋๊ตฐ๊ฐ ๋ชจ๋ฅด๊ณ ์์ ํ๋ค๊ฑฐ๋, ์ฃผ์๊ณผ ๊ณผ์ผ์ ํด๋น ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ด์ 1์ด ์ฌ๊ณผ์ธ ๊ฒ์ ์๊ธฐ ํ๋ค๋ค๋ฉด?
package enumTest;
public class ConstantDemo {
public static void main(String[] args) {
/**
* 1. ์ฌ๊ณผ
* 2. ๋ณต์ญ์
* 3. ๋ฐ๋๋
*/
int type = 1;
switch (type){
case 1:
System.out.println(57);
break;
case 2:
System.out.println(34);
break;
case 3:
System.out.println(93);
break;
}
}
}
์์ค์ ์ํ์ด ์๋ ์ฃผ์์์ ํ๋ฒ ์ ์ธํ๋ฉด ๋ ์ด์ ๋ฐ๋์ง ์์ final ํค์๋์ static ๋ณ์(=ํด๋์ค ๋ณ์ : ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ ํ ๋น๋์ด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ํด์ ๋จ)๋ก ์ ์ธํ์ฌ ์ฌ์ฉํ๊ธฐ ํธํด์ก๋ค.
package enumTest;
public class ConstantDemo {
private final static int APPLE = 1;
private final static int PEACH = 2;
private final static int BANANA = 3;
public static void main(String[] args) {
int type = 1;
switch (type){
case 1:
System.out.println(57);
break;
case 2:
System.out.println(34);
break;
case 3:
System.out.println(93);
break;
}
}
}
๊ณผ์ผ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ฝ๋๋ค์ด ์ถ๊ฐ๋๋ค๋ฉด ์ฝ๋๋ ์์ ์ ์ธ์ผ๋ก๋ง ๊ฐ๋ ์ฐฐ ๊ฒ์ด๋ค. Constant Interface๋ฅผ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง๋ณด์.
Constant Interface
์์๋ง ์ ์ํ ์ธํฐํ์ด์ค. ์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ ๋ณ์ ๋ฑ๋ก ์ ์๋์ผ๋ก public static final์ด ๋ถ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. Constant Interface๋ฅผ Implemnetํ ๊ฒฝ์ฐ ์์ ๋ฐ์ ํด๋์ค์์ ์์ ๋ณ์๋ช
์ ์ฌ์ฉํ ์ ์๋ค.
๋ํ ์ธํฐํ์ด์ค๋ก ์ ์ธํ๋ฉด์ APPLE์ด๋ผ๋ ๋์ผํ ์์๋ช ์ปดํ์ผ๋ฌ ์๋ฌ๋ฅผ ํผํ ์ ์์๋ค.
package enumTest;
interface FRUIT{
int APPLE = 1,PEACH = 2, BANANA =3;
}
interface COMPANY{
int APPLE = 1, GOOGLE = 2, ORACLE =3;
}
public class ConstantDemo {
public static void main(String[] args) {
if(FRUIT.APPLE == COMPANY.APPLE){
System.out.println("๊ณผ์ผ์ ํ๊ณผ ๊ธฐ์
์ ํ์ด ๊ฐ๋ค๊ณ ??");
}
int type = 1;
switch (type){
case 1:
System.out.println(57);
break;
case 2:
System.out.println(34);
break;
case 3:
System.out.println(93);
break;
}
}
}
ํ์ง๋ง FRUIT.APPLE๊ณผ COMPANY.APPLE๋ ๋ค๋ฅธ ๊ฐ๋ ์ ์ฝ๋๋ก ์์ฑํ์์ง๋ง ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์( ๋์ผํ int ๋ฐ์ดํฐ ํ์ ์ผ๋ก ์ ์ธ๋์ด)๋๋ ํ์์ด ๋ฐ์ํ๋ค.
Fruit, Company ํด๋์ค ๋ฐ์ดํฐ ํ์ ์ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ์ฌ ๋น๊ต๊ฐ ๋์ง ์๋๋ค.
๊ฐ๊ฐ์ ๋ณ์๋ final์ด๋ผ ๋ถ๋ณ์ด๊ณ , static์ด๋ฏ๋ก ์ธ์คํด์ค ์์ฑํ์ง ์์๋ ๋๋ค. ํ์ง๋ง ์๋์ ์ฝ๋๋ ๊ธธ์ด๋ ๊ธธ๊ณ ๋ณต์กํ๊ณ ๋ํ switch๋ฌธ์์ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค.
๊ทธ๋ฆฌํ์ฌ Enum์ด๋ผ๋ ๋ฑ์ฅํ์๋ค..
package enumTest;
class Fruit{
public static final Fruit APPLE = new Fruit();//์๊ธฐ ์์ ์ ์ธ์คํด์ค๋ฅผ ์์ APPLE์ ๊ฐ์ผ๋ก ์ง์
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
class Company{
public static final Fruit GOOGLE = new Fruit();
public static final Fruit APPLE = new Fruit();
public static final Fruit ORACLE = new Fruit();
}
public class ConstantDemo {
public static void main(String[] args) {
if(Fruit.APPLE == Company.APPLE){
System.out.println("๊ณผ์ผ์ ํ๊ณผ ๊ธฐ์
์ ํ์ด ๊ฐ์์");
}else{
System.out.println("๊ณผ์ผ์ ํ๊ณผ ๊ธฐ์
์ ํ์ด ๊ฐ์ง์์์!!");
}
Fruit type = Fruit.APPLE;
switch (type){
case 1:
System.out.println(57);
break;
case 2:
System.out.println(34);
break;
case 3:
System.out.println(93);
break;
}
}
}
2. Enum ์ ์ํ๋ ๋ฐฉ๋ฒ
Enum ์ด๋?
* ์ด๊ฑฐํ (enumerated type) - ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ = ์์๋ก๋ง ๊ตฌ์ฑ๋ ํด๋์ค
์์ ์ฝ๋์์ Fruit, Company๊ฐ ์ด์ ํด๋นํ๋ค.
Enum์ ์ฌ์ฉํ๋ ์ด์
- ์ฝ๋๊ฐ ๋จ์ํด์ง๋ค.
- ์ธ์คํด์ค ์์ฑ๊ณผ ์์์ ๋ฐฉ์งํ๋ค.
- ํค์๋ enum์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ ์๋๊ฐ ์ด๊ฑฐ์์ ๋ถ๋ช ํ๊ฒ ๋ํ ๋ผ ์ ์๋ค.
- ์์์ด๋ฏ๋ก ๊ฐ์ ๋ํ ๋์ ํ ๋น์ด ์๋๋ค.
accessModifier enum enumName{
//์์
//๋ฉ์๋ ์ ์
}
package enumTest;
/*
* class Week{
* public static final Week SUNDAY = new Week();
* public static final Week MONDAY = new Week();
* public static final Week TUESDAY = new Week();
* public static final Week WEDNESDAY = new Week();
* public static final Week THURSDAY = new Week();
* public static final Week FRIDAY = new Week();
* public static final Week SATURDAY = new Week();
*
*/
enum Week{
SUNDAY(1,"First day"),//์์ ์ ์ธ ๋ง๋ค ์์ผ ์ฝ๋์ฒ๋ผ ์ธ์คํด์คํ(์์ฑ์ ํธ์ถ)
MONDAY(2,"Second day"),
TUESDAY(3,"Third day"),
WEDNESDAY(4,"Fourth day"),
THURSDAY(5,"FIfth day"),
FRIDAY(6,"Sixth day"),
SATURDAY(7,"Seventh day");
private final int code;
private final String stringCode;
Week(int code, String stringCode){
System.out.println("Call Constructor "+this);
this.code = code;
this.stringCode = stringCode;
//์ ์ญ๋ณ์ stringCode = ๋งค๊ฐ๋ณ์ (=์ง์ญ๋ณ์)stringCode๋ฅผ ๋์
}//์ธ์คํด์ค ํ ๋๋ฉด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์์ฑ์ ํธ์ถ
//์ง์ญ๋ณ์๊ฐ ์ ์ญ๋ณ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฏ๋ก this๋ฅผ ์ฌ์ฉํ์ง์์ผ๋ฉด ์ง์ญ๋ณ์๋ฅผ ๋์
ํ๋ค.
public int getCode(){
return code;
}
public String getStringCode(){
return stringCode;
}
}
public class ConstantDemo {
public static void main(String[] args) {
Week constantFromEnum = Week.MONDAY;
System.out.println(constantFromEnum);
System.out.println(constantFromEnum.getCode());
System.out.println(constantFromEnum.getStringCode());
}
}
enum ์์ฒด๊ฐ ํด๋์ค ์ด๋ฏ๋ก ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
Call Constructor๊ฐ 7๋ฒ์ด ์ถ๋ ฅ๋ ๊ฒ์ enum Week ํด๋์ค์ ํ๋ ์๋งํผ ํธ์ถ๋์์์ ํ์ธํ ์ ์๋ค. ๊ฐ ๊ฐ์ ํ๋๊ฐ ์ธ์คํด์ค ์์ฑํ๋ฉด์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค๋ ์ด์ผ๊ธฐ
ํ์ง๋ง enum ์์ฑ์์ ์ ๊ทผ์ ํ์๋ฅผ public์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ enum ํด๋์ค์ ์์ฑ์์ ์ ๊ทผ ์ ํ์๋ private๋ง ํ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ถ์์๋ enumํด๋์ค๋ฅผ ์ธ์คํด์คํํ ์ ์๋๋ก ๋ง์๋ค. enumํด๋์ค๋ ์ ํ๋ ์์๊ฐ์ ๊ฐ์ง๋ ํด๋์ค์ธ๋ฐ public ์ ํ์๋ก ๋ฒ์๋ฅผ ๋ํ๋ค๋ฉด ๋ค๋ฅธ ์์ฑ์๊ฐ ๋ค๋ฅธ ์์๊ฐ์ ์ถ๊ฐํ ์ ์๋ค.
๋ํ, enum ์์ฑ์์ private ์ ํ์๋ฅผ ๋ถ์ด๋ฉด Modifier 'private' is redundant for enum constructors๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ง๋ ์ ์๋ค. enum ํด๋์ค ์์ฑ์๊ฐ ์์์ ์ผ๋ก private์ฌ์ private ์ ๊ทผ ์ ํ์๊ฐ ๋ถํ์ํ๋ค๊ณ ๋ฉ์์ง๊ฐ ๋ฌ๊ฒ์ด๋ค.
-> ์๋ฐ์ ์ ์์ package-private, private ์ ๊ทผ ์ ํ์๋ง enum ํด๋์ค์ ์ ๊ทผ ์ ํ์๋ก ์ฌ์ฉํ ์ ์๋ค๊ณ ๋์์๋๋ฐ(p.331) ๊ธฐ๋ณธ์ ์ผ๋ก private ์ ๊ทผ ์ ํ์๋ฅผ ์ฐ๊ณ ๊ทธ๊ฒ ์๋ต ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ package-private์ด๋ผ๊ณ ํํ๋ ๊ฒ ์๋๊น?๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
3. Enum์ด ์ ๊ณตํ๋ ๋ฉ์๋
[์์ - Enumํด๋์ค]
enum Week{
SUNDAY(1,"First day"),
MONDAY(2,"Second day"),
TUESDAY(3,"Third day"),
WEDNESDAY(4,"Fourth day"),
THURSDAY(5,"FIfth day"),
FRIDAY(6,"Sixth day"),
SATURDAY(7,"Seventh day");
private final int code;
private final String stringCode;
Week(int code, String stringCode){
System.out.println("Call Constructor "+this);
this.code = code;
this.stringCode = stringCode;
}
public int getCode(){
return code;
}
public String getStringCode(){
return stringCode;
}
}
compareTo()
enum์ ์์๊ฐ์ ๋น๊ตํ๊ธฐ ์ํด ์ฌ์ฉ
public class ConstantDemo {
public static void main(String[] args) {
Week constantFromEnum = Week.MONDAY;
System.out.println(Week.SUNDAY.compareTo(Week.MONDAY);
}
}
compareTo ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋น๊ต๋์์ ์ฐจ๋ฅผ ๋ฆฌํดํ๋ ๊ฒ์ ์ ์ ์๋ค.
Enum์ ๋ฉ์๋์ ์์๋ณ๋ก ๋ค๋ฅด๊ฒ ์ฌ์ ์ ๊ฐ๋ฅํ ๋ฉ์๋
valueOf()
๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํenum ํด๋์ค๋ ๋ฌด์กฐ๊ฑด java.lang.Enumํด๋์ค๋ฅผ ์์๋ฐ๋๋ค. ์ง์ extendsํ์ง ์์๋ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ ์ผ๋ก ์์๊ฐ๋๋ค. valueOf()๋ ์์๋ฐ์ java.lang.Enumํด๋์ค์ static ๋ฉ์๋์ด๋ฉฐ, ์ ๋ฌ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ Enumํด๋์ค์ ์์๋ฅผ ๋ฐํํ๋ค.
values()
Enumํด๋์ค์๋ API๋ฌธ์์ ์๋ ํน์ค ๋ฉ์๋์ด๋ฉฐ, ์ด๊ฑฐ๋ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด์ ๋ด์ ์์๋๋ก ๋ฐํํ๋ค.
public enum Level {
LOW(1,5),
MIDDLE(3,10),
HIGH(5,10);
private int score;
private int chance;
Level(int score, int chance) {
this.score = score;
this.chance = chance;
}
public int getScore() {
return score;
}
public int getChance() {
return chance;
}
public static void main(String[] args) {
Level level = Level.valueOf("MIDDLE");//์ ๋ฌ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ enum ์์๋ฅผ ๋ฐํ
System.out.println("middle level score = " + level.getScore());
System.out.println("middle level chance = " + level.getChance());
Level[] values = Level.values();//ํด๋น enum ํ์
์ ์์๋ฅผ ๋ฐฐ์ดํํ๋ก ๋ฐํ
for (Level lv : values) {
System.out.println(lv + " level's score = " + lv.getScore());
}
}
}
4. java.lang.Enum
์๋ฐ์์ enum์ java.lang ํจํค์ง์ Enum ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
enum ํด๋์ค๋ ์ถ์ ํด๋์ค์ด๋ค. → Enum ํด๋์ค๋ฅผ ์ธ์คํด์คํํ์ง ๋ชปํ๋๋ก ์ถ์ ํด๋์ค๋ก ์ ์ธํ ๊ฑฐ ๊ฐ๋ค.
enum ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ํธํ๊ฒ ์ฌ์ฉํ์ง๋ง ์ ์ธํ enum ํด๋์ค๋ Enum ํด๋์ค๋ฅผ ์๋์ผ๋ก ์์ํ์ฌ, Enumํด๋์ค์ ๋ณ์, ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ค. ์๋ ๋ค์ด์ด๊ทธ๋จ์ ํตํด enum ํ์ ์ ํด๋์ค๊ฐ Enum ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ฒ์ ํ์ธํ ์ ์๋ค.
5. EnumSet
Set ์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ enum์ด๊ฑฐ ์์ set
์ด๊ฑฐํ ํ์ ์ผ๋ก ์ง์ ํด ๋์ ์์๋ค์ ๋ฐฐ์ด์ฒ๋ผ ์์๋ค์ ๋ค๋ฃฐ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณต
package enumTest;
import java.util.EnumSet;
public class EnumSetTest {
enum Day{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
public static void main(String[] args) {
EnumSet es = EnumSet.allOf(Day.class);
EnumSet es2 = EnumSet.copyOf(es);//์ธ์์ ๋์ผํ enumSet ์์ฑ =clone()
System.out.println("EnumSet Day : "+es2);
es2 = EnumSet.noneOf(Day.class);//EnumSet ๋น์ฐ๊ธฐ
System.out.println("EnumSet Day : "+es2);
System.out.println("======================");
es = EnumSet.of(Day.FRIDAY, Day.WEDNESDAY);//์ง์ ํ ์์๋ง EnumSet์ ๋ฃ๊ธฐ
System.out.println("es : "+es);
es2 = EnumSet.complementOf(es);//๋งค๊ฐ๋ณ์๋ค์ ์์๋ค์ ๋นผ๊ณ EnumSet์ ๊ตฌ์ฑํด๋ผ
System.out.println("es2 : "+ es2);
es2 = EnumSet.range(Day.TUESDAY, Day.FRIDAY);//๊ตฌ๊ฐ์ ๋ง๊ฒ ์ถ๋ ฅ
System.out.println("es2 : "+es2);
}
}
* allOf(Enum ํด๋์ค๋ช . class)
์ด๊ฑฐํ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
* copyOf(es)
์ธ์์ ๋์ผํ enumSet ์์ฑํ๋ค.
* noneOf(Day.class)
EnumSet์ ๋น์ด๋ค.
* of(Day.FRIDAY, Day.WEDNESDAY)
์ง์ ํ ์์๋ง EnumSet์ ๋ฃ๋๋ค.
* complementOf(es)
๋งค๊ฐ๋ณ์๋ค์ ์์๋ค์ ๋นผ๊ณ EnumSet์ ๊ตฌ์ฑํ๋ค.
* range(Day.TUESDAY, Day.FRIDAY);
๊ตฌ๊ฐ์ ๋ง๊ฒ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ํด์ range ๋ฉ์๋๋ฅผ ๊ตฌํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น ์๋ ์ฌ์ง์ฒ๋ผ IllegalArgumentException์ด ๋ฐ์ํ๋ค!
es2 = EnumSet.range(Day.FRIDAY, Day.TUESDAY);//๊ตฌ๊ฐ์ ๊ฑฐ๊พธ๋ก ์ถ๋ ฅ
System.out.println("es2 Reverse : "+es2);
[ ์ฐธ๊ณ ]
alecture.blogspot.com/2012/11/enumset.html
www.tcpschool.com/java/java_api_enum
opentutorials.org/module/516/6091
www.opentutorials.org/module/1226/8025
https://www.geeksforgeeks.org/why-enum-class-can-have-a-private-constructor-only-in-java/
์๋ฐ์ ์ 13์ฅ
'Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM์ Garbage Collector (0) | 2022.10.28 |
---|---|
Annotation ์ ๋ ธํ ์ด์ (1) | 2021.02.04 |
Thread - ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ (0) | 2021.01.22 |
์์ธ์ฒ๋ฆฌ (0) | 2021.01.14 |
[ JAVA ] ์ธํฐํ์ด์ค (0) | 2021.01.08 |