---
# System prepended metadata

title: Untitled

---

## 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)