정리노트

[java] 컬렉션 프레임워크, 스레드

망고고래 2023. 10. 31. 17:53

Chapter11 컬렉션 프레임워크

1. 컬렉션 프레임워크

what?

데이터를 효율적으로 다루기 위한 클래스 모음

how?

Collection 인터페이스 구현: Set, List, Queue

독자적: Map

 

Collection 인터페이스 메서드

메서드 설명
boolean add(E e) 파라미터로 지정된 요소를 컬렉션에 추가
boolean contains(Object obj) 객체 obj 가 컬렉션에 존재하는지 여부
boolean isEmpty() 컬렉션이 비어있는지 아닌지 여부
Iterator iterator() 해당 컬렉션 요소의 iterator 객체 반환
boolean remove(Object obj) 객체 obj 제거
int size() 요소의 개수 반환

iterator() 메서드

what?

해당 컬렉션의 iterator를 반환하는 메서드

Iterator 객체의 메서드 설명
hasNext() 다음 요소가 있는지 없는지 판단
next() 다음 요소를 반환

 

2. Set

what?

데이터를 모아놓은 자료구조 인터페이스

why?

how?

  • 데이터 중복 x
  • 저장 순서 유지 x

구현 클래스

1)HashSet

what?

Set 인터페이스가 구현된 클래스

why?

how?

중복 x, 저장 순서 x

생성자

HashSet() 기본 생성자
HashSet(Collection collection) 컬렉션 요소로 HashSet 객체 생성
HashSet(int capacity) capacity의 용량을 가진 객체 생성

2)TreeSet

what?

Set 인터페이스+정렬 기능

why?

how?

중복 데이터 x

작은 값은 왼쪽에, 큰 값은 오른쪽에 추가

범위 검색에 효과적

 

순서: 객체 생성→add()→Iterator

 

 

 

3. List★

what?

데이터를 일렬로 늘어놓은 구조

why?

how?

List 인터페이스의 주요 메서드 설명
void add(int index, E elem) index 위치에 요소 elem 추가
E get(int index) index 위치에 있는 요소 반환
int indexOf(Object o) 요소 o가 있는 위치 반환
ListIterator listiterator() ListIterator 객체 반환
E remove(int index) index 위치에 있는 요소 삭제, 삭제한 요소 반환
E set(int index, E elem) 지정한 index의 요소 elem으로 변경

 

1)ArrayList

what?

배열에서 발전된 형태. 요소를 추가하면 0번부터 차례로 저장됨

why?

원하는 위치에 요소를 추가, 삭제, 반환 가능

how?

값을 가져올 때는 참조변수.get() 사용

2) LinkedList

what?

요소들이 앞뒤로 연결되어있는 리스트. 각 요소가 전과 뒤의 요소의 주소를 가지고 있음

 

 

 

4. Queue와 Stack

1)Queue

FIFO(First In First Out) 구조. 먼저 들어온 요소가 먼저 출력됨

  메서드 설명
예외 발생 boolean add(E e) Queue에 요소 e 추가
E element() Queue의 최상단 요소 반환
E remove() Queue의 최상단 요소 반환 후 제거
예외 발생 x boolean offer(E e) Queue에 요소 e 추가
E peek() Queue의 최상단 요소 반환
E poll() Queue의 최상단 요소 반환 후 제거

2)Stack

LIFO(Last In First Out). 마지막에 추가되는 요소가 먼저 출력됨

메서드 설명
E element() 요소 반환
E peek() 요소 반환
E pop() 요소 하나를 제거하면서 반환
E push(E item) 새로운 요소 추가
int search(Object o) 요소 o가 있는지 검색해서 위치 반환

 

 

 

 

5. Map

what?

키와 값을 쌍으로 저장, 키를 통해서 값 참조

why?

how?

구현 클래스: HashMap, TreeMap

메서드 설명
boolean containsKey(Object key) 해당 키가 있는지 여부 반환
boolean containsValue(Object value) 해당 값이 있는지 여부 반환
V get(Object key) 해당 key와 쌍인 값 반환
boolean isEmpty() 맵 객체에 요소가 없는지 판단
Set<key> keySet() 키들을 Set 형태로 반환
V put(K key, V value) 키와 값을 요소로 추가
V remove(Object key) 이 키를 가진 요소를 제거
int size() 전체 요소의 개수 반환

 

 

 

 

 

 

 

Chapter12 스레드

1. 스레드란?

하나의 프로세스 안에서 두 가지 이상의 일을 하도록 하는 것

 

2. 스레드 생성

1) Thread 클래스 상속

Thread 클래스 상속, public void run() 메서드 오버라이딩

실행: 인스턴스 생성, start() 메서드로 실행

class Th1 extends Thread
{
	public void run()
	{
   //작업 내용
	}   
}

public class Class
{
    public static void main(String[] args)
    {
        Th1 t1 = new Th1();
        t1.start();
    }
}

2) Runnable 인터페이스 구현

Runnable 인터페이스 구현, 추상 메서드 run() 오버라이딩

실행: 구현 클래스 인스턴스 생성, Thread 클래스의 인수로 주소 전달해서 스레드 생성, start() 메서드로 실행

class Th2 implements Runnable
{
	public void run()
    {
    	//작업 내용
    }
}

public class Class
{
	public static void main(String[] args)
    {
    	Th2 t2 = new Th2();
        Thread t = new Thread(t2);
        t.start();
    }
}

 

 

 

 

3. 스레드의 라이프사이클

  • new: new로 인스턴스화된 상태. Runnable이 될 수 있음
  • Runnable: start() 메서드가 호출됨, 실행할 수 있는 상태로 대기. 선택되면 run() 메서드 수행
  • Blocked: 실행 중인 스레드가 sleep(), join() 메서드를 호출함. 선택받을 수 없음
  • Dead: run() 메서드 실행을 모두 완료함. 할당받은 메모리와 정보 삭제

1)sleep()

what?

지정된 시간동안 block 상태로 만듦

why?

지정하지 않으면 시간 지체 없이 모두 실행되기 때문에 시간 간격을 두고 싶을 때 사용한다.

how?

1000분의 1초까지 지정 가능

 

 

2)join

특정 스레드가 작업을 먼저 수행할 때 사용

시간 지정시 특정 스레드가 작업을 먼저 수행. 시간 지정하지 않으면 작업 완료될 때까지 나머지가 대기

join()
join(long millis)
join(long millis, int nanos)

 

 

5. 스레드의 동기화

what?

멀티 스레드로 작업할 때 스레드간 작업이 간섭되지 않도록 하는 것

why?

여러 스레드가 한 메서드를 한꺼번에 사용하면서 야기되는 문제를 방지하기 위함

how?

공통되는 메서드 선언부에 'synchronized' 부여

synchronized 처리 된 메서드가 자신에게 접근한 스레드에게 lock 권한 부여. 작업을 완료하면 다시 가져옴. lock 권한을 가지지 못한 스레드는 메서드를 사용할 수 없다.