[JAVA] Generic,Enum
Categories: JAVA-Learn
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
getter์ setter
- getter์ setter ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ณดํธํ๋ฉด์๋ ์๋ํ๋ ๊ฐ์ผ๋ก ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์บก์ํ๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ๋ฌ์ฑ
- getter-setter๋ public์ด default
getter ๋ฉ์๋
โ ์ค์ ํ ๋ณ์๊ฐ์ ์ฝ์ด์ค๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฉ์๋
โ get-
์ ๋ฉ์๋๋ช
์์ ๋ถ์ฌ์ ์ฌ์ฉ
setter ๋ฉ์๋
โ ์ธ๋ถ์์ ๋ฉ์๋์ ์ ๊ทผํ์ฌ ์กฐ๊ฑด์ ๋ง์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด ์ค
โ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋๋ช
์ set-
์ ๋ถ์ฌ์ ์ ์
์์
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class GetterSetterTest {
public static void main(String[] args) {
Worker w = new Worker();
w.setName("๊น์ ๋ฆฌ");
w.setAge(30);
w.setId(5);
String name = w.getName();
System.out.println("๊ทผ๋ก์์ ์ด๋ฆ์ " + name);
int age = w.getAge();
System.out.println("๊ทผ๋ก์์ ๋์ด๋ " + age);
int id = w.getId();
System.out.println("๊ทผ๋ก์์ ID๋ " + id);
}
}
class Worker {
private String name; // ๋ณ์์ ์๋ํ. ์ธ๋ถ๋ก๋ถํฐ ์ ๊ทผ ๋ถ๊ฐ
private int age;
private int id;
public String getName() { // ๋ฉค๋ฒ๋ณ์์ ๊ฐ
return name;
}
public void setName(String name) { // ๋ฉค๋ฒ๋ณ์์ ๊ฐ ๋ณ๊ฒฝ
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 1) return;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
// ์ถ๋ ฅ๊ฐ
๊ทผ๋ก์์ ์ด๋ฆ์ ๊น์ ๋ฆฌ
๊ทผ๋ก์์ ๋์ด๋ 30
๊ทผ๋ก์์ ID๋ 5
์ ๋ค๋ฆญ
- ์ ๋ค๋ฆญ์ด๋?
- ํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์ถํ์ ์ง์ ํ ์ ์๋๋ก ์ผ๋ฐํํด ๋๋ ๊ฒ์ ์๋ฏธ
- ์ฆ, ์์ฑํ ํด๋์ค ๋๋ ๋ฉ์๋์ ์ฝ๋๊ฐ ํน์ ๋ฐ์ดํฐ ํ์ ์ ์ฝ๋งค์ด์ง ์๊ฒ ํด ๋ ๊ฒ
- ์ ๋ค๋ฆญ ์ฌ์ฉ์ด์
-
๊ธฐ์กด์ ๋ฐฉ์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Basket { private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item) { this.item = item; } }
- item์ String type ๋ง ์ฌ ์ ์์
-
์ ๋ค๋ฆญ ์ฌ์ฉ
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ๋จ ํ๋์
Basket
ํด๋์ค๋ง์ผ๋ก ๋ชจ๋ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์์1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Basket<T> { private T item; public Basket(T item) { this.item = item; } public T getItem() { return item; } public void setItem(T item) { this.item = item; } }
-
Basket class์ ์ธ์คํด์คํ
1
Basket<String> basket1 = new Basket<String>("item");
โ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด
Basket
ํด๋์ค ๋ด๋ถ์T
๊ฐ ๋ชจ๋String
์ผ๋ก ์นํโ ๋ง์ฝ ์์ํ์ ์ผ๋ก ์นํ์ wrapper class๋ก ์นํ๋จ
Ex) Integer, Double๊ณผ ๊ฐ์ ๋ํผ ํด๋์ค
-
-
์ ๋ค๋ฆญ ํด๋์ค ์ฌ์ฉ๋ฒ
-
์ ๋ค๋ฆญ ํด๋์ค
1 2 3
class Basket<T> { }
T
๋ฅผ ํ์ ๋งค๊ฐ๋ณ์<T>
์ ๊ฐ์ด ๊บพ์ ์์ ๋ฃ์ด ํด๋์ค ์ด๋ฆ ์์ ์์ฑํด ์ค์ผ๋ก์จ ํด๋์ค ๋ด๋ถ์์ ์ฌ์ฉํ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธ๊ฐ๋ฅ
-
๋ง์ฝ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ ๊ฒฝ์ฐ
1
class Basket<K, V> { ... }
T
,K
,V
๋ ๊ฐ๊ฐ Type, Key, Value์ ์ฒซ ๊ธ์๋ฅผ ๋ฐ์จ ๊ฒ
-
์ ๋ค๋ฆญํด๋์ค ์ฃผ์์ฌํญ
ํด๋์ค ๋ณ์(static)์๋ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉ๋ถ๊ฐ
- ํด๋์ค ๋ณ์๋ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๋ณ์ โ ํด๋์ค ๋ณ์์ ํ์ ์ด ์ธ์คํด์ค ๋ณ๋ก ๋ฌ๋ผ์ง๊ฒ ๋จ.
- ํ์
๋งค๊ฐ๋ณ์์ ์นํ๋ ํ์
์ผ๋ก ๊ธฐ๋ณธ ํ์
์ ์ง์ ๋ถ๊ฐ
-
int, double๊ณผ ๊ฐ์ ์์ ํ์ ์ ์ง์ ํด์ผ ํ๋ ๋งฅ๋ฝ์์๋ Integer, Double๊ณผ ๊ฐ์ ๋ํผ ํด๋์ค๋ฅผ ํ์ฉ
1 2 3 4 5 6 7 8 9 10
Basket<String> basket1 = new Basket<String>("Hello"); Basket<Integer> basket2 = new Basket<Integer>(10); Basket<Double> basket3 = new Basket<Double>(3.14); ---- // new Basket<โฆ>์ ์๋์ ๊ฐ์ด ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์๋ตํ๊ณ ์์ฑ๊ฐ๋ฅ // => ์ฐธ์กฐ๋ณ์์ ํ์ ์ผ๋ก๋ถํฐ ์ ์ถํ ์ ์๊ธฐ ๋๋ฌธ Basket<String> basket1 = new Basket<>("Hello"); Basket<Integer> basket2 = new Basket<>(10); Basket<Double> basket2 = new Basket<>(3.14);
-
-
๋คํ์ฑ ์ ์ฉ ๊ฐ๋ฅ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
class Flower { ... } class Rose extends Flower { ... } class RosePasta { ... } class Basket<T> { private T item; public T getItem() { return item; } public void setItem(T item) { this.item = item; } } class Main { public static void main(String[] args) { Basket<Flower> flowerBasket = new Basket<>(); flowerBasket.setItem(new Rose()); // ๋คํ์ฑ ์ ์ฉ flowerBasket.setItem(new RosePasta()); // ์๋ฌ } }
- Main ํด๋์ค์ main method์์ flowerBasket์ Basket์ ํ์ ์ผ๋ก ๊ฐ์ฒด Flower๋ก ์ง์ ํ์ฌ ๊ฐ์ฒด ์์ฑ
- new Rose()๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด๋ Rose ํ์ ์ด๋ฉฐ, Rose ํด๋์ค๋ Flower ํด๋์ค๋ฅผ ์์๋ฐ๊ณ ์์ผ๋ฏ๋ก, flowerBasket ์ item์ ํ ๋น๊ฐ๋ฅ
- ๋ฐ๋ฉด, new RosePasta()๋ฅผ ํตํด ์์ฑ๋ ์ธ์คํด์ค๋ RosePasta ํ์ ์ด๋ฉฐ, RosePasta ํด๋์ค๋ Flower ํด๋์ค์ ์๋ฌด๋ฐ ๊ด๊ณ๊ฐ ์์ผ๋ฏ๋ก ํ ๋น ๋ถ๊ฐ.
์ฆ,
Basket
ํด๋์ค๋ฅผ ์ธ์คํด์คํํ ๋ ํ์ ์ผ๋กFlower
ํด๋์ค์ ํ์ ํด๋์ค๋ง ์ง์ ํ๋๋ก ์ ํ -
ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ง ํ์ ์ผ๋ก ์ง์ ํ ์ ์๋๋ก ์ ํ๊ฐ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
interface Plant { ... } class Flower implements Plant { ... } class Rose extends Flower implements Plant { ... } class Basket<T extends Plant> { private T item; ... } class Main { public static void main(String[] args) { // ์ธ์คํด์คํ Basket<Flower> flowerBasket = new Basket<>(); Basket<Rose> roseBasket = new Basket<>(); } }
-
ํน์ ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด์ ๋์์ ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ง ํ์ ์ผ๋ก ์ง์ ํ ์ ์๋๋ก ์ ํํ๋ ค๋ฉด ์๋์ ๊ฐ์ด
&
๋ฅผ ์ฌ์ฉ โ ์ด ๊ฒฝ์ฐ์๋ ํด๋์ค๋ฅผ ์ธํฐํ์ด์ค ์์ ์์น ์์ผ์ผ ํจ.1 2 3 4
class Basket<T extends **Flower** & Plant> { // (1) private T item; ... }
-
์ ๋ค๋ฆญ๋ฉ์๋
-
ํด๋์ค ๋ด๋ถ์ ํน์ ๋ฉ์๋๋ง ์ ๋ค๋ฆญ์ผ๋ก ์ ์ธ๊ฐ๋ฅ
1 2 3 4 5 6
class Basket { ... public <T> void add(T element) { ... } }
- ์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ๋งค๊ฐ ๋ณ์ ์ ์ธ์ ๋ฐํํ์ ์์์ ์ด๋ฃจ์ด์ง๋ฉฐ, ํด๋น ๋ฉ์๋ ๋ด์์๋ง ์ ์ธํ ํ์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉ๊ฐ๋ฅ
-
์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ๋งค๊ฐ ๋ณ์๋ ์ ๋ค๋ฆญ ํด๋์ค์ ํ์ ๋งค๊ฐ ๋ณ์์ ๋ณ๊ฐ์ ๊ฒ
1 2 3 4 5 6
class Basket<T> { // 1 : ์ฌ๊ธฐ์์ ์ ์ธํ ํ์ ๋งค๊ฐ ๋ณ์ T์ ... public <T> void add(T element) { // 2 : ์ฌ๊ธฐ์์ ์ ์ธํ ํ์ ๋งค๊ฐ ๋ณ์ T๋ ์๋ก ๋ค๋ฅธ ๊ฒ์ ๋๋ค. ... } }
- ํด๋์ค๋ช ์์์ ์ ์ธํ ํ์ ๋งค๊ฐ ๋ณ์๋ ํด๋์ค๊ฐ ์ธ์คํด์คํ๋ ๋ ํ์ ์ด ์ง์ ๋จ
-
์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ์ง์ ์ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ด๋ฃจ์ด์ง.
1 2 3 4 5 6
Basket<String> basket = new Bakset<>(); // ์ ์์ ์ 1์ T๊ฐ String์ผ๋ก ์ง์ ๋ฉ๋๋ค. basket.<Integer>add(10); // ์ ์์ ์ 2์ T๊ฐ Integer๋ก ์ง์ ๋ฉ๋๋ค. basket.add(10); // ํ์ ์ง์ ์ ์๋ตํ ์๋ ์์ต๋๋ค.
-
static
๋ฉ์๋์์๋ ์ ์ธํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํด๋์ค ํ์ ๋งค๊ฐ ๋ณ์์ ๋ฌ๋ฆฌ ๋ฉ์๋ ํ์ ๋งค๊ฐ ๋ณ์๋
static
๋ฉ์๋์์๋ ์ ์ธํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ1 2 3 4 5 6
class Basket { ... static <T> int setPrice(T element) { ... } }
-
String
ํด๋์ค์ ๋ฉ์๋๋ ์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์์ ์ ์ฌ์ฉ๋ถ๊ฐ but, Object ํด๋์ค๋ ๊ฐ๋ฅ- ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์์ ์ ๋ค๋ฆญ ํ์ ์ด ๊ฒฐ์ ๋๋ฏ๋ก, ์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์์ ์์๋ ์ค์ ์ด๋ค ํ์ ์ด ์ ๋ ฅ๋๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ String ํด๋์ค์ ๋ฉ์๋๋ ์ฌ์ฉ ๋ถ๊ฐ
-
๋ชจ๋ ์๋ฐ ํด๋์ค์ ์ต์์ ํด๋์ค์ธ
Object
ํด๋์ค์ ๋ฉ์๋๋ ์ฌ์ฉ ๊ฐ๋ฅEx)
equals()
,toString()
๋ฑ์ดObject
ํด๋์ค์ ๋ฉ์๋
์์ผ๋์นด๋
์ด๋ ํ ํ์
์ผ๋ก๋ ๋์ฒด๋ ์ ์๋ ํ์
ํ๋ผ๋ฏธํฐ, ๊ธฐํธ?
๋ก ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉ๊ฐ๋ฅ
-
์ผ๋ฐ์ ์ผ๋ก ์์ผ๋์นด๋๋
extends
์super
ํค์๋๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉ1
<? extends T><? super T>
- <? extends T>๋ ์์ผ๋์นด๋์ ์ํ ์ ํ์ ๋๋ ๊ฒ์ผ๋ก์, T์ T๋ฅผ ์์๋ฐ๋ ํ์ ํด๋์ค ํ์ ๋ง ํ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์๋๋ก ์ง์
-
<? extends T>๋ ์์ผ๋์นด๋์ ์ํ ์ ํ์ ๋๋ ๊ฒ์ผ๋ก์, T์ T๋ฅผ ์์๋ฐ๋ ํ์ ํด๋์ค ํ์ ๋ง ํ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์๋๋ก ์ง์
- ๋ฐ๋ฉด, <? super T>๋ ์์ผ๋์นด๋์ ํํ ์ ํ์ ๋๋ ๊ฒ์ผ๋ก, T์ T์ ์์ ํด๋์ค๋ง ํ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ก ํจ
- extends ๋ฐ super ํค์๋์ ์กฐํฉํ์ง ์์ ์์ผ๋์นด๋(<?>)๋ <? extends Object>
- ๋ชจ๋ ํด๋์ค ํ์ ์ Object ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฏ๋ก, ๋ชจ๋ ํด๋์ค ํ์ ์ ํ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์์์ ์๋ฏธ
- ์์
-
์ฌ์ฉํ ํด๋์ค ์ ์ - ์์๊ณ์ธต๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class Phone {} class IPhone extends Phone {} class Galaxy extends Phone {} class IPhone12Pro extends IPhone {} class IPhoneXS extends IPhone {} class S22 extends Galaxy {} class ZFlip3 extends Galaxy {} class User<T> { public T phone; public User(T phone) { this.phone = phone; } }
-
ํด๋์ ํ๋ณ ๊ธฐ๋ฅ๋ณ ๋ถ๋ฅ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class PhoneFunction { public static void call(User<? extends Phone> user) { System.out.println("user.phone = " + user.phone.getClass().getSimpleName()); System.out.println("๋ชจ๋ Phone์ ํตํ๋ฅผ ํ ์ ์์ต๋๋ค."); } public static void faceId(User<? extends IPhone> user) { System.out.println("IPhone๋ง Face ID๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. "); } public static void samsungPay(User<? extends Galaxy> user) { System.out.println("Galaxy๋ง ์ผ์ฑ ํ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. "); } public static void recordVoice(User<? super Galaxy> user) { } }
-
๋ฉ์๋ ํธ์ถ
1 2 3 4 5 6 7 8 9
public class Example { public static void main(String[] args) { // PhoneFunction.faceId(new User<Phone>(new Phone())); // X PhoneFunction.faceId(new User<IPhone>(new IPhone())); PhoneFunction.faceId(new User<IPhone15Pro>(new IPhone15Pro PhoneFunction.recordVoice(new User<Phone>(new Phone())); // PhoneFunction.recordVoice(new User<IPhone>(new IPhone())); // PhoneFunction.recordVoice(new User<S24>(new S24())); // X // PhoneFunction.recordVoice(new User<ZFlip5>(new ZFlip5())); // X
- ์ฃผ์ ์ฒ๋ฆฌ๋ ์๋ฌ ๋ฐ์ ํ๋ ๋ถ๋ถ
- faceId๋ <? extends IPhone> ํ์ ์ด ์์ผ ํ๋ฏ๋ก Iphone์ ํ์ํด๋์ค๋ง ๊ฐ๋ฅ, ๊ทธ๋์ ์์ํด๋์ค์ธ phone์ ์ฌ ์ ์์
- recordVoice ๋ฉ์๋๋ (User<? super Galaxy> user) โ ๊ฐค๋ญ์์ ์์ํด๋์ค์ ํ์ ๋ง ์ง์ ํ ์ ์์, ๊ทธ๋์ ZFlip5์ S24๋ ์ฌ ์ ์๊ณ Phone๋ง ๊ฐ๋ฅ.
- ์ฃผ์ ์ฒ๋ฆฌ๋ ์๋ฌ ๋ฐ์ ํ๋ ๋ถ๋ถ
-
Enum
- ์ด๊ฑฐํ(enum; enumerated type)์ ์ฌ๋ฌ ์์๋ค์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ ์ธ ํ ์ ์๋ ์๋ฐ์ ๋ฌธ๋ฒ์์ = ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ์ ์๋ฏธ
- ์๋ก ๊ด๋ จ ์๋ ๋ด์ฉ๋ค์ ๋ชจ์ ํ ๋ฒ์ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ ๋ ์ฌ์ฉ โ ์ค๋ฌด์์ ๋ง์ด ์ฐ์
Enum์ ํ์์ฑ
- ๊ธฐ์กด์ ์์๋
public static final
์ ์ฌ์ฉ์ ๋จ์ -
์์ ๋ช ์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์
1 2 3 4 5 6 7 8 9
public static final int SPRING = 1; public static final int SUMMER = 2; public static final int FALL = 3; public static final int WINTER = 4; public static final int DJANGO = 1; public static final int SPRING = 2; // ๊ณ์ ์ SPRING๊ณผ ์ค๋ณต ๋ฐ์! public static final int NEST = 3; public static final int EXPRESS = 4;
-
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ํจ.
1 2 3 4 5 6 7 8 9 10 11 12 13
class Seasons { public static final Seasons SPRING = new Seasons(); public static final Seasons SUMMER = new Seasons(); public static final Seasons FALL = new Seasons(); public static final Seasons WINTER = new Seasons(); } class Frameworks { public static final Frameworks DJANGO = new Frameworks(); public static final Frameworks SPRING = new Frameworks(); public static final Frameworks NEST = new Frameworks(); public static final Frameworks EXPRESS = new Frameworks(); }
- but, ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์ฌ์ฉ์ ์ ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ switch๋ฌธ์ ํ์ฉํ ์ ์๋ค๋ ๋ฌธ์ ๋ฐ์
-
-
Enum ์ฌ์ฉ ์ด์
1 2
enum Seasons { SPRING, SUMMER, FALL, WINTER } enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }
1) switch๋ฌธ ์ฌ์ฉ ๊ฐ๋ฅ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
enum Seasons {SPRING, SUMMER, FALL, WINTER} public class Main { public static void main(String[] args) { Seasons seasons = Seasons.SPRING; switch (seasons) { case SPRING: System.out.println("๋ด"); break; case SUMMER: System.out.println("์ฌ๋ฆ"); break; case FALL: System.out.println("๊ฐ์"); break; case WINTER: System.out.println("๊ฒจ์ธ"); break; } } } //์ถ๋ ฅ๊ฐ ๋ด
2) ์ฌ๋ฌ ์์๋ค์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ ์ธํ๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅ
3) ์์ ๋ช ์ ์ค๋ณต์ ํผํ๊ณ , ํ์ ์ ๋ํ ์์ ์ฑ์ ๋ณด์ฅ
Enum ์ฌ์ฉ๋ฒ
-
์ด๊ฑฐํ ์ ์
1
enum ์ด๊ฑฐํ์ด๋ฆ { ์์๋ช 1, ์์๋ช 2, ์์๋ช 3, ...}
- ์์๋ ๋์๋ฌธ์๋ก ๋ชจ๋ ์์ฑ์ด ๊ฐ๋ฅํ์ง๋ง, ๊ด๋ก์ ์ผ๋ก ๋๋ฌธ์๋ก ์์ฑ
- ๋ฐ๋ก ๊ฐ์ ์ง์ ํด์ฃผ์ง ์์๋ ์๋์ ์ผ๋ก 0๋ถํฐ ์์ํ๋ ์ ์๊ฐ์ด ํ ๋น๋์ด ๊ฐ๊ฐ์ ์์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋จ (์๋ ์์ -1 ์ฐธ๊ณ )
- ์ด๊ฑฐํ์ ์ ์ธ๋ ์์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ด๊ฑฐํ์ด๋ฆ.์์๋ช
- ๋ณ๊ฒฝ๋์ง ์๋ ํ์ ์ ์ธ ๋ฐ์ดํฐ๋ค์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ๋ฅ
- ์ด๊ฑฐํ์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋ (์ต์์ ํด๋์ค Object์ ์ ์๋ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์์๋ ๊ฒ๊ณผ ๋์ผ)
-
java.lang.Enum
์ ์ ์๋ฆฌํด ํ์ ๋ฉ์๋(๋งค๊ฐ๋ณ์) ์ค๋ช String name() ์ด๊ฑฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ฉฐ, ๋ฆฌํด๋๋ ๋ฌธ์์ด์ ์ด๊ฑฐํ์ ์ ์ ์ํ ๋ ์ฌ์ฉํ ์์ ์ด๋ฆ๊ณผ ๋์ผํฉ๋๋ค. int ordinal() ์ด๊ฑฐ ๊ฐ์ฒด์ ์๋ฒ(0๋ถํฐ ์์)์ ๋ฆฌํดํฉ๋๋ค. int compareTo(๋น๊ต๊ฐ) ์ฃผ์ด์ง ๋งค๊ฐ ๊ฐ๊ณผ ๋น๊ตํด์ ์๋ฒ ์ฐจ์ด๋ฅผ ๋ฆฌํดํฉ๋๋ค. ์ด๊ฑฐ ํ์ valueOf(String name) ์ฃผ์ด์ง ๋ฌธ์์ด์ ์ด๊ฑฐ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํฉ๋๋ค. ์ด๊ฑฐ ๋ฐฐ์ด values() ๋ชจ๋ ์ด๊ฑฐ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด๋ก ๋ฆฌํดํฉ๋๋ค.
-
-
์์ -1
1 2 3 4 5 6 7 8 9 10 11
enum Seasons { SPRING, //์ ์๊ฐ 0 ํ ๋น SUMMER, //์ ์๊ฐ 1 ํ ๋น FALL, //์ ์๊ฐ 2 ํ ๋น WINTER //์ ์๊ฐ 3 ํ ๋น } public class EnumExample { public static void main(String[] args) { System.out.println(Seasons.SPRING); // SPRING
Seasons
๋ผ๋ ์ด๋ฆ์ ์ด๊ฑฐํ์SPRING, SUMMER, FALL, WINTER
๋ ์ด ๋ค ๊ฐ์ ์ด๊ฑฐ ๊ฐ์ฒด๋ฅผ ํฌํจ
-
์์ -2
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 32 33 34 35 36 37 38 39 40
enum Level { LOW, // 0 MEDIUM, // 1 HIGH // 2 } public class EnumTest { public static void main(String[] args) { Level level = Level.MEDIUM; Level[] allLevels = Level.values(); for(Level x : allLevels) { System.out.printf("%s=%d%n", x.name(), x.ordinal()); } Level findLevel = Level.valueOf("LOW"); System.out.println(findLevel); System.out.println(Level.LOW == Level.valueOf("LOW")); switch(level) { case LOW: System.out.println("๋ฎ์ ๋ ๋ฒจ"); break; case MEDIUM: System.out.println("์ค๊ฐ ๋ ๋ฒจ"); break; case HIGH: System.out.println("๋์ ๋ ๋ฒจ"); break; } } } //์ถ๋ ฅ๊ฐ LOW=0 MEDIUM=1 HIGH=2 LOW true ์ค๊ฐ ๋ ๋ฒจ
- ํฅ์๋ for๋ฌธ๊ณผ ์ด๊ฑฐํ์ ์ต์์ ํด๋์ค๋ก๋ถํฐ ํ์ฅ๋
name()
๊ณผordinal()
์ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ ์ด๋ฆ๊ณผ ์์๋ฅผ ์ถ๋ ฅ๊ฐ์ผ๋ก ๋ฐํ valueOf()
๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์ง์ ๋ ์ด๊ฑฐํ์์ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ์ด๊ฑฐํ ์์๋ฅผ ๋ฐํ- ๋ฐํ๋ ์์๊ฐ ์๋ํ๋ ์์์ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ํ์ธ
- switch๋ฌธ์์ level์ ์์์ Levle.MEDIUM์ผ๋ก ์ด๊ธฐํ ๋์๊ณ case MEDIUM์ด ์คํ๋์ด ์ค๊ฐ๋ ๋ฒจ์ด ์ถ๋ ฅ๋จ, ๋งจ ์์ค์ ํด๋นํ๋ Level level = Level.MEDIUM; ์ด ๊ฐ์ฅ ๋ฆ๊ฒ ์ถ๋ ฅ๋๋ ๊ฑด switch๋ฌธ์ด ํ๋ก๊ทธ๋จ ์ ์ผ ๋ง์ง๋ง์ ์๊ธฐ ๋๋ฌธ
- ํฅ์๋ for๋ฌธ๊ณผ ์ด๊ฑฐํ์ ์ต์์ ํด๋์ค๋ก๋ถํฐ ํ์ฅ๋
COMMENT
์ค๋์ ๋ญ๊ฐ ์ค๋ฌด์์ ์ฌ์ฉํ๊ธฐ ์ข์ ๊ฒ๋ค์ ๋ํด ๋ฐฐ์ ๋ค. ์ ๋ค๋ฆญ์ ์๋ฐ์ ๊ฝ์ด๋ผ๊ณ ํ๋ค๋๋ฐ ํ์ ์ ์ง์ ํ์ง ์๋ ๊ฒ์ ์ด์ ์ด ํ์คํ ๋ฏ. ํ์ ์ ์ง์ ํ์ง ์๊ณ ์์์ ํ์ ์ผ๋ก ์ง์ ํ ์ ์๋ ๊ฒ์ธ๋ฐ ๋ชจ๋ ํ์ ์ ํ์ฉํ๋ ๊ฒ ๊ฐ์ง๋ง ํ์ ์ ์ ํํ ๋ ์์ฃผ ์ฌ์ฉํ๋ค๊ณ ํ๋ ์ ์ํด์ ์ฌ์ฉํด๋ด์ผ๊ฒ ๋ค.
์ง๊ธ ๋น์ฅ์ ๋ง์ด ์ฌ์ฉํ๊ธฐ๊ฐ ๋ฏ์ค์ด์ ํ์ฉํ ์ฝ๋๋ ๋ง์ด๋ณด๊ณ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ ์ฌ์ฉํด์ ์์ฃผ ๋ณผ ์ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
Leave a comment