Enum π§Ύ
Enumμ΄ μ겨λ μ΄μ
본격μ μΌλ‘ Enumμ΄ λ¬΄μμΈμ§ μμ보기 μ μ, μ Enumμ΄ λ±μ₯νκ² λμλμ§λ₯Ό λ¨Όμ μμ보μ π
λΉμ¦λμ€ μꡬμ¬ν
μ¬μ©μλ λ€μν κ²°μ μλ¨μ μ νν μ μμΌλ©°, κ²°μ λ°©μμ λ°λΌ μλ‘ λ€λ₯Έ μ λ΅μ΄ μ€νλλ€. νμ¬ μ 곡λλ κ²°μ μλ¨μ λ€μκ³Ό κ°λ€:
kakao : μΉ΄μΉ΄μ€νμ΄λ₯Ό ν΅ν΄ κ²°μ naver : λ€μ΄λ²νμ΄λ₯Ό ν΅ν΄ κ²°μ bad : λΆμμ ν ν
μ€νΈμ© κ²°μ μλ¨ κ²°μ μλ¨μ μ
λ ₯νλ©΄, ν΄λΉ λ°©μμ λ§λ κ²°μ μ λ΅ κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€.- μ μλμ§ μμ κ²°μ μλ¨μ μ
λ ₯ν κ²½μ° μμΈλ₯Ό λ°μμν¨λ€.
π λ¬Έμμ΄ κΈ°λ° λ°©μ
μ¬μ©μκ° μ νν κ²°μ μλ¨μ λ°λΌ κ²°μ μλ¨μ μ 곡νλ ν΄λμ€λ₯Ό λ§λ€μ΄λ³΄μ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # StrategyFactory
public class StrategyFactory {
public static PayStrategy of(String payOption, int amount){
if("kakao".equals(payOption)){
return new KakaoStrategy(payOption, amount);
} else if("naver".equals(payOption)){
return new NaverStrategy(payOption, amount);
} else if("bad".equals(payOption)){
return new BadStrategy(payOption, amount);
} else {
throw new IllegalArgumentException("ν΄λΉ μ λ΅μ΄ μμ΅λλ€.");
}
}
}
|
β οΈ λ¬Έμ μ
- μ€νμ μ·¨μ½ :
"KAKAO", "kakao"λ± λ€μν νκΈ°λ‘ μ
λ ₯ κ°λ₯ -> μ€λ₯ λ°μ - μ»΄νμΌ νμ κ²μ¦ λΆκ° : μλͺ»λ λ¬Έμμ΄λ λ°νμμ κΉμ§λ μ μ μμ
- λλ²κΉ
μ΄ μ΄λ €μ : λ¬Έμ κ° λ°μν΄λ μμΈμ μ°ΎκΈ° μ΄λ €μ
β
λ¬Έμμ΄ μμ μ¬μ©(μ‘°κΈ λμμ§ λ°©μ)
1
2
3
4
5
6
7
| # PayOption
public class PayOption {
public static final String KAKAO = "KAKAO";
public static final String NAVER = "NAVER";
public static final String BAD = "BAD";
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # StrategyFactory
public class StrategyFactory {
public static PayStrategy of(String payOption, int amount){
if(PayOption.KAKAO.equals(payOption)){
return new KakaoStrategy(payOption, amount);
} else if(PayOption.NAVER.equals(payOption)){
return new NaverStrategy(payOption, amount);
} else if(PayOption.BAD.equals(payOption)){
return new BadStrategy(payOption, amount);
} else {
throw new IllegalArgumentException("ν΄λΉ μ λ΅μ΄ μμ΅λλ€.");
}
}
}
|
π κ°μ μ
- μμλ₯Ό ν΅ν΄ λ¬Έμμ΄ μ
λ ₯λ³΄λ€ μμ μ± ν₯μ
- μλͺ»λ μμλͺ
μ μ
λ ₯νλ©΄ μ»΄νμΌ νμμ μ€λ₯ λ°μ
β οΈ λ¬Έμ μ
- μ¬μ ν
String νμ
μ΄λ―λ‘, μλͺ»λ λ¬Έμμ΄ μ
λ ₯ κ°λ₯μ±μ λ¨μ μμ - λκ΅°κ° μ€μλ‘
PayOption.KAKAO λμ "kakao" μ
λ ₯νλ©΄ κ²μ¦ λΆκ° StrategyFactory.of(String payOption, int amount) λ©μλλ₯Ό μ¬μ©νλ μ
μ₯μμ μ¬λ°λ₯Έ κ°μ΄ 무μμΈμ§ μκΈ° μ΄λ €μ
π νμ
μμ μ΄κ±°ν ν¨ν΄
Stringμ μμ μ°μ§ μκ³ , μ¬μ μ μ μλ κ°μ²΄λ§ μ¬μ©ν μ μλλ‘ λ§λ€λ©΄ μ΄λ¨κΉ?
1
2
3
4
5
6
7
8
| # PayOption
public class PayOption {
private PayOption(){}
public static final PayOption KAKAO = new PayOption();
public static final PayOption NAVER = new PayOption();
public static final PayOption BAD = new PayOption();
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # StrategyFactory
public class StrategyFactory {
public static PayStrategy of(PayOption payOption, int amount){
if(payOption == PayOption.KAKAO){
return new KakaoStrategy(payOption, amount);
} else if(payOption == PayOption.NAVER){
return new NaverStrategy(payOption, amount);
} else if(payOption == PayOption.BAD){
return new BadStrategy(payOption, amount);
} else {
throw new IllegalArgumentException("ν΄λΉ μ λ΅μ΄ μμ΅λλ€.");
}
}
}
|
π κ°μ μ
==μΌλ‘ λΉκ΅νλ―λ‘ μ€ν κ±±μ X- νμ
μΌλ‘ μ ν -> μλͺ»λ κ° μ
λ ₯ λΆκ°
- λ°μ΄ν° μΌκ΄μ± 보μ₯
β οΈ λ¬Έμ μ
- μ§μ ꡬνν΄μΌν μ½λκ° λ§μ
- private μμ±μ λ±μ ν¨ν΄μ λ°λ³΅μ μΌλ‘ μμ±ν΄μΌ ν¨
π μ΅μ’
κ°μ : Java Enum νμ©
μλ°μμλ μμ²λΌ 볡μ‘ν ꡬνμ λ¨μνν μ μλλ‘ Enumμ μ 곡νλ€.
μ΄μ Enumμ νμνμ¬ μ λ΅μ μμ νκ³ νΈλ¦¬νκ² κ΄λ¦¬ν΄λ³΄μ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # PayOtion Enum
public enum PayOption {
KAKAO {
@Override
public PayStrategy createStrategy(int amount) {
return new KakaoStrategy(this, amount);
}
},
NAVER {
@Override
public PayStrategy createStrategy(int amount) {
return new NaverStrategy(this, amount);
}
},
BAD {
@Override
public PayStrategy createStrategy(int amount) {
return new BadStrategy(this, amount);
}
};
public abstract PayStrategy createStrategy(int amount);
}
|
1
2
3
4
5
6
| # StrategyFactory
public class StrategyFactory {
public static PayStrategy of(PayOption payOption, int amount){
return payOption.createStrategy(amount);
}
}
|
1
2
3
4
5
6
7
8
| # PayMain
public class PayMain {
public static void main(String[] args) {
PayStrategy payment = StrategyFactory.of(PayOption.KAKAO, 1000);
payment.processPay();
}
}
|
Enum λ΄λΆμμ μ λ΅μ μμ±ν μ΄μ
κ° Enum μμ(KAKAO, NAVER, BAD) κ° κ³ μ ν μ λ΅ μμ± λ°©μμ κ°μ§κ³ μμΌλ―λ‘, switch, if-else μμ΄λ λ€νμ±μ ν΅ν΄ κΉλνκ² λμμ μ μν μ μλ€.
μ₯μ
- νμ
μμ μ± λ³΄μ₯ : μ μλ
enum κ° μΈμλ μ¬μ© λΆκ° switch/if μμ΄ λμ μ μ κ°λ₯- μ½λ μμ§λ ν₯μ : μ λ΅ λ‘μ§μ
enum μμ λ£μ μ μμ - OCP(κ°λ°©-νμ μμΉ) λ§μ‘± : μλ‘μ΄ κ²°μ λ°©μ μΆκ° μ κΈ°μ‘΄ μ½λ λ³κ²½μμ΄
enumμλ§ μΆκ°νλ©΄ λ¨