## Collection 사용
- 비교 연산으로 결과를 판단하는 동작이 동일한 패턴으로 발생할때 사용
-> 가독성, 성능 개선에 도움을 준다.
- Collection 방법을 사용하면 Heap Memory 사용량이 증가하나,
가독성과 수행속도 측면에서 이점을 가져올 수 있다.
- 특정 언어에 한정되는 방식이 아니며, Collection 이란 Array, Stack, Map 등의 자료구조를 활용한 것을 말함
#### 예시1) 현재 달의 날수 출력
```C++=
#include<iostream>
#include<time.h>
#define BASE_YEAR 1900;
bool isLeapYear(int year)
{
return ((year % 4) == 0) &&
((year % 100) != 0) ||
((year % 400) == 0) ? true : false;
}
void useCollection(int year, int month)
{
int days[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31} };
std::cout << days[isLeapYear(year)][month] << " days for " << year << "-" << month << "\n";
}
void useSwitch(int year, int month)
{
int days = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = isLeapYear(year) ? 29 : 28;
}
std::cout << days << " days for " << year << "-" << month << "\n";
}
int main()
{
time_t temp;
time(&temp);
struct tm* currentTime = localtime(&temp);
int year = currentTime->tm_year + BASE_YEAR;
int month = currentTime->tm_mon + 1;
// Case1. Switch 사용
useSwitch(year, month);
// Case2. Collection 방법 사용
useCollection(year, month);
return 0;
}
```
#### 예시2) 결제 방식에 따른 처리
```java=
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String paymentType = "CREDIT_CARD";
// Case1. use if-else if
System.out.println(useIf(paymentType));
// Case2. use Collection
System.out.println(useCollection(paymentType));
}
public static String useIf(String paymentType) {
if (paymentType.equals("KAKAO")) {
// Do Something
return "Payment Type : KAKAO";
} else if (paymentType.equals("NAVER")) {
// Do Something
return "Payment Type : NAVER";
} else if (paymentType.equals("SAMSUNG_PAY")) {
// Do Something
return "Payment Type : SAMSUNG_PAY";
} else if (paymentType.equals("APPLE_PAY")) {
// Do Something
return "Payment Type : APPLE_PAY";
} else if (paymentType.equals("CREDIT_CARD")) {
// Do Something
return "Payment Type : CREDIT_CARD";
} else {
// Do Something
// Exception Case
return "Exception";
}
}
public static String useCollection(String paymentType) {
Map<String, String> paymentTypeMap = loadPaymentTypeMap();
return paymentTypeMap.get(paymentType);
}
public static Map<String, String> loadPaymentTypeMap() {
Map<String, String> paymentMap = new HashMap<String, String>();
paymentMap.put("KAKAO", "Payment Type : KAKAO");
paymentMap.put("NAVER", "Payment Type : NAVER");
paymentMap.put("SAMSUNG_PAY", "Payment Type : SAMSUNG_PAY");
paymentMap.put("APPLE_PAY", "Payment Type : APPLE_PAY");
paymentMap.put("CREDIT_CARD", "Payment Type : CREDIT_CARD");
return paymentMap;
}
}
```
### 분석
- if-else
- Branch Statement

- 최악의 경우 O(N)
- Switch
- Jump Statement

- 최악의 경우 O(logN)
- Array
- O(1)
- Map
- HashMap -> O(1) (Array Base)
- TreeMap -> O(logN) (Binary Tree Base)