## 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 ![](https://i.imgur.com/GYx7NHv.png) - 최악의 경우 O(N) - Switch - Jump Statement ![](https://i.imgur.com/KBGGfxW.png) - 최악의 경우 O(logN) - Array - O(1) - Map - HashMap -> O(1) (Array Base) - TreeMap -> O(logN) (Binary Tree Base)