해시 함수
- 해시 함수(Hash Function)는 입력값(키나 데이터)을 고정된 크기의 해시값(Hash Value)으로 변환하는 수학적 함수입니다.
- 해시값은 보통 숫자나 문자열의 형태로 표현되며, 입력값의 크기와 관계없이 항상 고정된 길이를 가집니다.
사용 목적
- 빠른 데이터 검색:
- 해시값을 인덱스로 사용하여 데이터를 빠르게 검색하는 데 활용 (예: 해시 테이블, HashMap)
- 객체를 빠르게 저장하고 삭제
- 데이터 무결성 확인:
- 데이터를 해싱한 값(체크섬)을 저장하고, 이후 해시값을 비교하여 데이터 변조 여부를 확인 (예: 파일 다운로드 검증)
- 암호학:
- 비밀번호나 민감한 정보를 암호화하는 데 활용 (예: SHA-256)
- 고유 식별자 생성:
- 데이터를 해싱하여 고유한 식별자를 생성 (예: Git의 커밋 ID)
입력값 → 해시값 생성
- 입력값이 정수, 문자열, 또는 기타 데이터 형태일 수 있음.
- 해시 함수는 이를 정해진 알고리즘에 따라 고정 크기의 해시값으로 변환.
Git은
분산 버전 관리 시스템으로, 저장소의 데이터와 변경 사항을 효율적이고 신뢰성 있게 관리하기 위해 해시 함수를 핵심적으로 사용합니다.
Git에서 해시 함수를 사용하면, 코드가 변경될 때마다 새로운 고유 해시 값이 생성됩니다. 이 해시 값으로 Git은 변경된 내용을 즉시 감지하고, 어떤 부분이 달라졌는지 추적할 수 있습니다.
즉, 코드가 변경되면 해시 값도 바뀌고, Git은 이를 기준으로 변경 내용을 관리합니다
import 'package:equatable/equatable.dart';
void main(){
// 해시 함수 만들어 보기
print('a'.hashCode);
// hashCode 란 객체를 고유한 정수 값으로 변환 되어지는 값을 의미한다.
// hashCode => 해시 값
// 내가 직접 해시 함수를 만들어 보자.
// 1단계
String text = 'Nike';
int codeUnit = text.codeUnitAt(0);
print(codeUnit); // 아스키코드 값이 변환 되네
print('---------------------');
Football f1 = Football('nike');
print(f1.unicodeHashCode);
Football f2 = Football('nike1');
print(f2.unicodeHashCode);
// 그런데 해시 코드는 도대체 언제 사용이 될까?
// 해시 자료구조로 이루어진 컬렉션 프레임 워크를 사용할 때 해시코드를 사용해서
// 객체를 빠르게 저장하고 찾고 삭제한다.
Set<Football> footballSet = {f1};
Football f3 = Football('nike');
// 논리적으로 f1 값이 nike 이고 f3 값이 nike
// 자료구조에서 f1 이 있지만 논리적으로 같은 객체가 있다고 판별 하고 싶다면
print('set 자료구조에서 : ${footballSet.contains(f3)}');
}
class Football extends Equatable{
String brand;
Football(this.brand);
// dart가 알아서 (특정 알고리즘) 만들어 준 고유한 정수 값
@override
int get hashCode => super.hashCode;
int get unicodeHashCode{
int hash = 0;
for(int i = 0; i < brand.length; i++){
hash += brand.codeUnitAt(i);
}
return hash;
}
@override
List<Object?> get props => [brand];
}
실행 결과______
'Flutter > 심화 버전' 카테고리의 다른 글
[Flutter] 심화 버전 - 가변 객체 -> 불변 객체 (0) | 2024.11.22 |
---|---|
[Flutter] 심화 버전 - 객체 동등성 재정의 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 불변 객체 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 가변 객체 (0) | 2024.11.22 |
[Flutter] 심화 버전 - 객체 (0) | 2024.11.22 |