DevBoi

잡다한 기술 지식 10 본문

[Computer Science]

잡다한 기술 지식 10

HiSmith 2021. 7. 28. 12:44
반응형

1. Hash Table

해쉬 테이블, 즉 해시 맵에서 개발자들이 사용하지만, 실제 내부 동작에 대해서는 잘 모르는 경우가 많다.

예를 들어서, hash 에 smith, 1234 가 들어있다고 가정하자

key는 smith 이고, 중간에 hash function 을 통해서, buckets에 들어간다.

이 해쉬 펑션은 value의 index를 알아내기 위한것이고, 해당 펑션 수행이후 값에 대한, index주소를 알아내서

값을 알아오게 된다.

 

 

잘 정리된 그림을 보면 바로 이해가 된다.

이 구조로 저장과, 삭제가 아주 빠르다.

hash function 은 key를 array size로 나눈다. 그렇기 때문에 충돌 방식이 발생한다.

1,11,21 은 같은,  주소를 갖게 되는 것이다.

 

이러한 충돌 방식은 여러 구현으로 해결한다.

 

1.Separate chaining 방식

동일 index로 인해, 충돌 발생시에, 해당 인덱스에 LinkedList를 추가해서, 체크를한다.

충돌 발생해도, 이 LinkedList로 인해, 방지가 된다.

삭제 처리도, 해당 linkedList를 처리하면된다.

Jdk 1.8 부터는 , index에 노드가 8개 이하면, Linked List , 이상이면 Tree구조로 저장한다.

 

예를 들어서 같은 인덱스라도, 152번에 대한 참조를 하면, 152번으로 참조된 값을 보고,

Linked List를 참조하여, Smith 가 아니라 Dee라고 알게 되면, Dee를 return 한다.

 

 

 

2. Heap

자료구조에서 자주 나오는 Heap에 대해서 공부해보자

완전 이진 트리의 일종으로, 우선순위 큐를 위하여 만들어진 자료구조이다.

여러개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다.

 

최대 힙, 최소힙이 존재한다.

 

힙을 저장하는 표준적인 자료구조는 배열이다.

 

최대힙의 경우, 만약에 4의 자식으로 8이 추가되었다고 가정해보자,

그러면 4,8을 비교해서, 8이 더크므로 교환, 7,8이 동일하게 계산되어 교환이 일어나서, 최대힙을 유지하게된다.

 

 

삭제도 동일하게 동작한다.

삭제는 단, 삭제된 쪽에 가장 마지막 문자열이 오게되고, 이 문자열 기준으로, 비교해가면서 교환이 이루어진다. 

최대힙에서, 7이나 8이 삭제되면, 그자리에 3이온다.

 

 

 

5. 컴포넌트와 모듈의 차이

컴포넌트와 모듈은 비슷하지만, 모듈이 컴포넌트보다 큰단위이다.

두 용어 전체 시스템을 구성하는 부분부분을 분해하는 것을 목적으로 사용

컴포넌트는 하나의 부품, 작은영역에서 서로 연관되어 다용도로 사용이 가능

컴포넌트는 런타임 개체를 참조하는데

 

다 필요없고, 결국은 

모듈은 가장 첫번째, 그리고 가장 맨앞에 위치하는 구현의 단위 이다.

즉 모듈이 여러개가 모여서 컴포넌트를 만든다.

따라서, 모듈은 정적, 컴포넌트는 이 조합이기 때문에 비교적 동적? 집합의 개념이다.

 

 

 

6. 메모리 누수가 무엇인가, 막기위한 방법은무엇인가

메모리 누수의 의미 : 필요하지 않는 메모리를 계속 점유하고 있는 상태

할당된 메모리를 사용한 뒤 반환 하지 않으면서, 메모리가 낭비되는 현상

 

다 사용한 객체에 대한 참조를 해제하지 않으면, GC 대상이 되지 않아, 메모리 누수가 발생한다.

GC가 되지 않는 루트 참조 객체는 아래와 같다.

 

1. static 변수에 의한 객체 참조

static 은 GC의 대상이 되지 않는다. static 변수는 클래스가 생성될때 메모리를 할당 받고, 프로그램 종료 시점에

반환 되므로 사용하지 않고 있어도 메모리가 할당되어있다.

 

2.Wrapper 를 이용해서 무의미한 객체를 생성하는 경우

 

3. 캐시 항목을 지워주지 않아서

4. 스트림 형식의 데이터를 사용하고 닫지 않아서

5. 자료 구조 (Stack 등을 ) 사용하지만, 실제 사용을 다하고, GC 대상이 되지않아서,

pop을 한 이후에는 null값으로 참조하여, GC대상이 되어야 하는데,

만약에 Stack을 직접 생성하여 사용하는데 pop을 하고 null로 값을 변환하지 않아, GC대상이 되지않으면,

이것들이 쌓이게 되고, 메모리 누수 현상이 발생하게 된다.

 

메모리 누수는 이러한 것들에 대한 방어가 필요하다.

반응형