안녕하세요. 오늘은 자바스크립트 알고리즘 중 해시(hash)에 대한 개념을 설명드리고 해당 개념을 응용해볼만한 쉬운 리트코드 예제를 보여드리도록 할게요.
해시의 개념
해시(Hash)는 키(Key)를 값(Value)에 매핑할 수 있는 데이터 구조입니다. 해시 테이블은 이러한 키와 값을 저장하는 데 사용되며, 복잡한 자료 구조보다 데이터를 더 빠르게 검색, 삽입, 삭제할 수 있게 해 줍니다. 키를 해시 함수를 통해 해시 코드로 변환하며, 이 해시 코드를 사용하여 값이 저장되는 위치, 즉 인덱스를 결정합니다.
자바스크립트 알고리즘에서 해시를 이용하기 위해선 Map 객체를 사용하여 해시 테이블을 구현합니다. Map 객체는 키-값 쌍인 집합입니다. 한 Map에서의 키는 오직 단 하나만 존재합니다. 이는 Map 집합의 유일성입니다.
예를 들어, let map = new Map();로 새 Map을 생성하고, map.set(key, value);로 키와 값을 추가하며, map.get(key);로 키에 해당하는 값을 검색할 수 있습니다. map.has(key);는 Map이 주어진 키를 가지고 있는지 확인하는 데 사용됩니다.
해시 문법 설명
- 해시 맵 생성: let map = new Map();
- 요소 추가: map.set(key, value); - 키와 값을 맵에 추가합니다.
- 요소 접근: map.get(key); - 키에 해당하는 값을 반환합니다.
- 요소 존재 확인: map.has(key); - 맵에 특정 키가 존재하는지 확인합니다.
- 요소 삭제: map.delete(key); - 특정 키를 가진 요소를 삭제합니다.
- 전체 요소 삭제: map.clear(); - 맵의 모든 요소를 삭제합니다.
- 요소 순회: map.forEach((value, key) => { /* 로직 */ }); - 맵의 모든 요소를 순회합니다.
아래는 가장 중요한 문법 개념입니다.
const contacts = new Map();
contacts.set("Jessie", { phone: "213-555-1234", address: "123 N 1st Ave" });
contacts.has("Jessie"); // true
contacts.get("Hilary"); // undefined
contacts.set("Hilary", { phone: "617-555-4321", address: "321 S 2nd St" });
contacts.get("Jessie"); // {phone: "213-555-1234", address: "123 N 1st Ave"}
contacts.delete("Raymond"); // false
contacts.delete("Jessie"); // true
console.log(contacts.size); // 1
해시와 객체의 차이점
해시(해시 맵)와 객체는 모두 자바스크립트 알고리즘에서 데이터를 저장하는 유사한 방식이지만 몇 가지 차이점이 있습니다.
해시 맵은 Map 객체를 통해 구현되어 어떠한 타입의 키도 사용할 수 있으며 삽입 순서를 유지합니다. 반면에 일반 객체는 주로 문자열 또는 심볼을 키로 사용하며, 속성의 순서를 보장하지 않습니다.
Map 객체는 키의 존재를 확인하는 메소드(has), 크기를 알려주는 속성(size) 등의 유용한 내장 메소드를 제공하지만, 일반 객체는 이러한 내장 메소드를 제공하지 않습니다. 또한, 해시 맵은 데이터를 안전하게 캡슐화하며 외부에서 직접 접근을 허용하지 않는 반면, 객체의 속성은 기본적으로 외부에서 접근 가능합니다.
따라서 보안과 데이터의 무결성이 중요한 경우, 해시 맵을 사용하는 것이 좋으며, 구조가 간단하고 빠른 접근이 필요한 경우에는 객체를 사용하는 것이 일반적입니다.
해시와 객체 차이점에 대해 숙지하려면 아래 링크를 클릭하세요.
해시 맵 순환하기
해시 맵을 순환하기 위해서는 크게 for문과 forEach문을 사용합니다.
for문 사용하기 예제
const myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
for (const [key, value] of myMap) {
console.log(`${key} = ${value}`);
}
// 0 = zero
// 1 = one
forEach 사용 예제
myMap.forEach((value, key) => {
console.log(`${key} = ${value}`);
});
// 0 = zero
// 1 = one
자바스크립트 알고리즘 해시 리트코드 예제
자바스크립트 알고리즘 리트코드 예시 문제를 반드시 풀고 본인이 익힌 개념을 꼭 익히세요.
'알고리즘 이야기 > 알고리즘 개념' 카테고리의 다른 글
투 포인터 이해하기, 리트코드 예제 (0) | 2024.03.26 |
---|---|
자바스크립트 알고리즘 재귀(recursion) 개념과 예제 (0) | 2024.03.25 |
투 포인터 알고리즘 개념, 쉬운 예시 문제, 리트코드 문제 (1) | 2024.03.11 |
JS 알고리즘 - substring(), substr() & Math.floor(), toFixed() 정리 (0) | 2023.09.29 |
댓글