05.11 TIL (항해99 4일차 과제)

2023. 5. 11. 12:56개발일지

스프링 컨테이너

스프링 프레임워크의 핵심 컨포넌트이다.
자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.
스프링에서는 자바 객체를 빈(Bean)이라 한다.

즉, 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며,
생성된 빈에게 추가적인 기능을 제공하는 것이다.


List : 순서가 있으며, 데이터(값) 중복 허용
Set : 순서가 없으며, 데이터(값) 중복을 허용하지 않음
Map : Key&Value 구조, Key는 중복을 허용하지 않으며, Value(값)는 중복을 허용,
또한 Map은 Red-Black Tree 알고리즘을 이용하고
HashMap은 Hash Table을 이용해서 Key - Value 관계를 유지합니다.


HashMap과 Map의 차이점은

특정 키에 대한 값을 찾는 과정에서, Hash는 Hash Table을 이용해서 키-값 관계를 유지하고,
Map은 red-black tree 알고리즘을 이용합니다.

red-black tree 알고리즘은 binary-search tree(이진탐색트리)의 일종이다.
기존의 이진탐색트리는 input이 정렬되있다면 높이가 n이 되고, 따라서 시간복잡도 또한 O(n)에 도달하게 된다.


하지만 레드 블랙 트리의 경우 특정 조건을 지키면서 균형잡힌 이진트리가 되기때문에 Search, Insert, Delete 연산을 최악의 경우에도 O(logN) 시간안에 가능하도록 해준다.

binary-search tree는
각 노드에 값이 있어야하고
각 노드의 키값은 모두 달라야 한다.
값들은 전순서가 있고.
노드의 왼쪽 서브트리에는 그 노드의 값보다 작은 값들을 지닌 노드들로 이루어져 있다. 또한
노드의 오른쪽 서브트리에는 그 노드의 값보다 큰 값들을 지닌 노드들로 이루어져 있다.
좌우 하위 트리는 각각이 다시 이진 탐색 트리여야 하며, 중복된 노드가 없어야 한다.


HashTable은 데이터를 저장하는 자료구조 중 한개고 빠르게 데이터를 검색할 수 있는 자료구조이다. HashTable이 빠른 검색속도를 제공하는 이유는 내부적으로
배열을 사용해서 데이터를 저장하기 때문이다. 즉, 우리가 흔히 알고 있는 key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index값을 활용해 값을
저장하거나 검색하는 것을 HashTable이라고 한다.


해쉬테이블은 


HashMap은 Map 인터페이스의 구현체 중 하나입니다. 따라서 HashMap은 Map의 기능을 제공하면서 추가적인 특징과 동작을 가지고 있습니다. 이들 사이에는 몇 가지 주요한 차이점이 있습니다:

구현 방식:

Map: Map은 인터페이스로, 자체적인 구현을 가지지 않습니다. 따라서 Map을 구현한 다양한 클래스(예: HashMap, TreeMap)를 사용하여 Map의 기능을 구현합니다.
HashMap: HashMap은 해시 테이블을 사용하여 Map 인터페이스를 구현한 클래스입니다. 해시 함수를 사용하여 키(key)와 값(value)의 쌍을 매핑하고, 배열 내의 버킷에 저장합니다.
순서 보장:

Map: Map 인터페이스는 일반적으로 삽입 순서나 정렬된 순서를 보장하지 않습니다. 이는 구체적인 Map 구현체에 따라 다를 수 있습니다.
HashMap: HashMap은 순서를 보장하지 않습니다. 데이터를 추가한 순서대로 값을 가져올 수 있는 것은 아니며, 내부적으로 해시 함수를 사용하여 키의 해시 코드를 계산하고 버킷에 매핑하기 때문입니다.
동기화:

Map: Map 인터페이스는 기본적으로 스레드 안전하지 않습니다. 여러 스레드가 동시에 Map에 접근하고 수정하는 경우 동기화를 직접 처리해야 합니다.
HashMap: HashMap은 스레드 안전하지 않습니다. 동시에 여러 스레드가 HashMap에 접근하고 수정하려는 경우, 외부에서 동기화 메커니즘을 사용하여 스레드 안전성을 보장해야 합니다.
성능:

Map: Map은 다양한 구현체에 따라 성능 특징이 다릅니다. TreeMap은 정렬된 순서를 유지하므로 삽입, 검색, 삭제에 O(log n)의 시간 복잡도를 가지지만, HashMap은 해시 테이블을 사용하여 평균적으로 O(1)의 시간 복잡도를 가지는 빠른 검색 및 삽입 성능을 제공합니다.
HashMap: HashMap은 해시 테이블의 내부 구조를 활용하여 데이터를 검색하고 삽입하는데 뛰어난 성능을 보입니다. 그러나 데이터가 해시 충돌이 발생하면 성능이 감소할 수 있습니다.
따라서, HashMap은 Map의 구현체 중 하나로, 빠른 검색과 삽입 성능을 제공하는 동시에 순서를 보장하지 않습니다.

'개발일지' 카테고리의 다른 글

05.12 TIL (@SpringBootTest와 @WebMvcTest의 차이점)  (0) 2023.05.12
05.12 TIL (Rest Client)  (0) 2023.05.12
제네릭  (0) 2023.05.10
JPA 영속성컨텍스트  (0) 2023.05.10
HTTP와 HTTPS 차이  (0) 2023.05.10