본문 바로가기
네이버클라우드캠프

네이버클라우드캠프 12일차(2/7)

by 하루지오 2024. 2. 7.

1. Collection

- 데이터를 저장, 관리하고 처리하기 위한 인터페이스들의 모음
- 다양한 유틸리티 메서드들을 제공하여 데이터 구조와 처리를 효율적으로 관리할 수 있도록 함
- 데이터의 추가, 삭제, 검색 등의 작업을 간편하게 수행
ex) List, Set, Map
 

2. Stack, Queue

1) 스택 (Stack)

- 선입후출(LIFO)
- 밑이 막혀있는 구조
- 최근 데이터를 우선순위로 함
- 시간 역순으로 데이터를 꺼냄
ex) 함수의 return 호출, 수식 계산(기호)

2) 큐 (Queue)

- 선입선출(FIFO)
- 시간 순서대로 데이터를 저장
- 용량의 한계는 있음
- 시간이 지나도 데이터는 남아있음
- 링크드리스트를 사용하면 가장 쉽게 큐 생성 가능
- 우선순위 큐 등 다양한 큐의 종류가 있음
우선순위 큐 : 패럿(?)의 중요도에 따라 우선순위 부여
 ex) 통신(버퍼), 시뮬레이션

 

3. Thread

- 파일(실행 전)->프로세스(실행 후)
- 프로그램 실행 후 프로세스는 메모리(스택, 힙, 코드)에 올라감
- 이때 main Thread는 프로세스의 실행 주체
- Thread = '어떤 함수를 실행해'
- main Thread = 'main 함수를 실행해'

 

4. Muti Thread

- 병렬로 스레드 2개 만들면, 동시에 2개 실행 가능 ex) main Thread와 work Thread 동시 실행
- if 스레드 2개가 하나의 변수에 동시에 접근하는 경우
→ 경쟁이 발생해서 값이 왜곡될 수 있음 
→ 이를 방지하기 위해 Thread의 동기화 발생(일종의 안전 장치)
→ 그러나 속도가 좀 느릴 수 있음
(+) 이러한 안전장치들은 큰 조직일수록 실수를 방지하기 위해 꼭a 필요함

//Map 컬렉션 생성
		Map<Integer, String> map = Collections.synchronizedMap(new HashMap<>());
			
		//작업 스레드 객체 생성
		Thread threadA = new Thread() {
			@Override
			public void run() {
				//객체 1000개 추가
				for(int i=1; i<=1000; i++) {
					map.put(i, "내용"+i);
				}
			}
		};
			
		//작업 스레드 객체 생성
		Thread threadB = new Thread() {
			@Override
			public void run() {
				//객체 1000개 추가
				for(int i=1001; i<=2000; i++) {
					map.put(i, "내용"+i);
				}
			}
		};