해시(Hash)에 대해 알아보자.
해시 테이블, 해시 맵, 해시함수등 … 많이 들어봤을텐데 이번에 간단하게 정리 해볼까한다.
📖 해시 테이블(Hash Table)을 특징을 정리하자면, 아래와 같이 정리 할 수 있다.
- 임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장.
- 키에 대한 해시값을 사용하여 값을 저장하고 Key-Value 쌍의 갯수에 따라 크기가 증가.
- 해시값 자체를 index로 사용하기 때문에 평균 시간복잡도가 O(1)로 매우 빠름.
🖍 해시 테이블과 비슷한 것으로 해시 맵이 있는데, 처음에는 같은 용어인줄 알고 헷갈렸는데, 동기화 지원 여부에 대해 차이가 있다는 걸 알게되었다.
해시 테이블은 동기화를 고려해야대는 상황에서(병렬 처리할 때) 쓰이고, 해시 맵의 경우는 동기화를 고려하지 않아도 되는 상황(병렬 처리 하지 않을 때)에서 주로 쓰인다.
📖 해시 함수(hash function)을 특징을 정리하자면, 아래와 같이 정리 할 수 있다.
- 입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환.
- 동일한 값이 입력되면 언제나 동일한 출력값을 보장.
- 출력된 결과 값을 토대로 입력 값을 유추할 수 없음.
❗️해시는 언제 사용될까?
리스트를 사용할 수 없을 때 사용한다. 리스트는 숫자 인덱스를 이용하여 접근하는데, 숫자가 아닌 다른 값을 사용하려고 할 때 사용할 수 있다. 또한 빠른 접근과 집계가 필요할 때 사용한다.
해시는 간단하게 아래와 같이 만들어볼 수 있다.
cat = {
'name':'뚜뚜',
'breed': '아메숏',
'age' : 2.5
}
# {'name': '뚜뚜', 'breed': '아메숏', 'age': 2.5}
여기서 value에는 무엇이든 넣을 수 있다는 걸 기억하자.
# 이렇게 함수를 만들어 함수를 넣을 수 있고, 어떤 객체든 전부 가능하다.
def add(a,b):
return a+b
cat = {
'name':'뚜뚜',
'breed': '아메숏',
'age' : 2.5,
'fun' : add(1,3)
}
# {'name': '뚜뚜', 'breed': '아메숏', 'age': 2.5, 'fun': 4}
반대로 key에도 무엇이든 넣을 수 있다. ( 리스트 같은건 빼고 )
cat = {
'name':'뚜뚜',
'breed': '아메숏',
'age' : 2.5,
'fun' : add(1,3),
1 : add(1,23),
add(1,234) : '덧셈'
}
# {'name': '뚜뚜', 'breed': '아메숏', 'age': 2.5, 'fun': 4, 1: 24, 235: '덧셈'}