[자료구조] Bloom Filter
서론 Hash(1) 포스트와 Hash(2) 포스트에서 해시에 대해 공부했었다. 그에 나아가서 확률적 자료구조인 Bloom Filter에 대해서 알아보고 해시와 어떤 점에서 관련 있는지 보고자 한다. Bloom Filter 간단하게 해시 함수 결과값을 이용해서 집합 내에 특정 원소가 존재하는지 확인할 때 사용하는 확률적 자료구조라고 생각하면 ...
서론 Hash(1) 포스트와 Hash(2) 포스트에서 해시에 대해 공부했었다. 그에 나아가서 확률적 자료구조인 Bloom Filter에 대해서 알아보고 해시와 어떤 점에서 관련 있는지 보고자 한다. Bloom Filter 간단하게 해시 함수 결과값을 이용해서 집합 내에 특정 원소가 존재하는지 확인할 때 사용하는 확률적 자료구조라고 생각하면 ...
서론 지난 Hash 포스팅에서 해시와 HashMap에 대해서만 알아봤지만 비슷한 Hashtable 클래스나 HashMap에 특정 기능이 더해진 ConcurrentHashMap, LinkedHashMap에 대해서 알아보고자 한다. Hashtable vs HashMap Hashtable 클래스와 HashMap 클래스의 일부분을 참고해서 공통점과 차이...
서론 실제로 알고리즘 문제를 풀 때 Java에서 HashMap, HashSet과 같은 구현체를 자주 사용하곤 한다. 이 중에서 Hash라는 키워드가 왜 사용되는걸까 궁금하고, 해시에 대해 더 자세히 공부해보고자 한다. 해시(Hash 함수)와 해시 테이블 해시 함수는 임의의 데이터를 고정된 숫자 범위의 데이터로 맵핑하는 단...
서론 Java로 개발할 때 객체가 같은지 확인하는 일이 다수 있다. 처음 객체지향에 접하고 Java를 배울 때 객체를 기본 타입 비교하는 것처럼 == 으로 비교할 때 원하는 조건(같음)이 만족하지 않는다는 것을 알았다. 이 점에 나아가서 Java Object 클래스의 hashCode() 메소드와 equals() 메소드와의 관계까지 알아보고자 한다. ...
서론 Reflection은 Java의 기본 입문서에 구성되어있지 않지만 강력한 기능이고, 객체의 암/복호화 기능을 구현할 때 사용했었는데 깊게 공부하고 정리해보고자 한다. Reflection이 무엇일까? 런타임 시점에 클래스를 분석해서 동적으로 값을 수정하고, 생성자와 필드 이름, 메소드 이름과 같은 메타 데이터 정보를 알고 조작할 수...
서론 Java에서 문자열 중 특정 정규 표현식이나 문자열이 포함되어있는지 확인하는 메소드 String.contains() 를 포함해서 String 객체에서 자주 사용하는 메소드들의 내부 로직이 어떻게 구성되어있는지 알아보자. ⚠️ 대부분의 코드는 Java 11을 예시로 든다. 목차 데이터 관리 자료구조 compareTo() cont...
서론 알고리즘 문제를 풀면서 필요한 효율적인 문자열 검색 알고리즘에 대해서 공부해보고, 깊게 이해해보려고 한다. 일반적인 문자열 검색 일반적인 문자열 검색은 ‘Naïve String Search’라고 칭하는데, 아래 코드처럼 검색 대상과 대상 패턴을 두고 문자열의 인덱스 기반으로 (0부터 전체 길이 - 패턴의 길이까지) 패턴과 똑같은 ...
서론 지난 Stack vs Queue 포스팅에 이어서 java.util.* 패키지에 구현된 PriorityQueue와 내부 구현 자료구조인 Heap에 대해서 알아보고자 한다. 정의 PriorityQueue 우선순위 큐는 큐에 원소 별로 ‘우선순위’라는 개념을 도입한 자료구조를 의미한다. 구현 방식에 따른 시간 복잡도 ...
서론 평소에 Java로 알고리즘 문제를 풀면서 사용되는 Stack, Queue 자료구조와 java.util.* 패키지에 구현된 스택과 큐 클래스에 대해 더 알아보고자 한다. Stack과 Queue의 정의 간단하게 Stack과 Queue를 정의하면 Stack은 후입선출, LIFO(Last-In-First-Out) 형태의 자료구조이고, Queu...
서론 배치, Spring Batch란 무엇인가 포스트에서 배치와 Spring Batch가 필요한 이유와 내부 개념에 대해 간단히 알아보았다. 이번 포스트에서는 Spring Batch 프로젝트를 생성할 때 필요한 의존성과 필수 설정에 대해 알아보고자 한다. build.gradle 의존성 dependencies { implementation ...