Java
-
[Java] Hash Collision 실험 : Hash 충돌을 일으켜보자Java 2024. 6. 5. 09:55
이번 글에서는 Hash 충돌을 일으켜보려 한다.Hash 개념을 잘 모른다면 아래 링크를 읽고 오는 것을 추천한다.https://mergeman.tistory.com/18 [Java] Hash 충돌이 일어난다면? : Hash CollisionJava의 Collection 프레임워크에는 Hash 라고 붙은 자료구조가 있다.대표적으로 HashMap, HashSet 이 있는데, 키 값에 대한 Hash 값을 이용해 자료를 저장하고 조회하는 자료구조이다.개념상 Hash 버킷(하나mergeman.tistory.com [ Hash 충돌이 일어나지 않는 경우 ]흔히 String, Integer, Long 등의 내장 라이브러리를 사용해 Hash의 키로 지정한다면 Hash 충돌이 발생하지 않는다.같은 키를 사용하더라도 덮어..
-
[Java] Hash 충돌이 일어난다면? : Hash CollisionJava 2024. 6. 4. 16:09
Java의 Collection 프레임워크에는 Hash 라고 붙은 자료구조가 있다.대표적으로 HashMap, HashSet 이 있는데, 키 값에 대한 Hash 값을 이용해 자료를 저장하고 조회하는 자료구조이다.개념상 Hash 버킷(하나의 키에 대응되는 통)은 Hash 값 % M(자료구조의 길이)를 통해 결정된다. Hashing 을 하는 이유는 키를 균등하게 분포해 탐색 시간 O(1)을 보장하기 위함이다.하지만 여기서 한 가지 문제가 발생할 수 있는데, 다른 키임에도 불구하고 같은 Hash 값이 나올 수 있다는 것이다.이를 Hash 충돌 이라고 하는데 아무리 잘 설계해도 여전히 Hash 충돌을 100% 막을 순 없다.따라서 Hash 충돌이 발생했을 때 자료를 잘 저장하고 조회하는 방법이 필요하다.[ Has..
-
[Java] IO vs NIO : Blocking Read와 Non-Blocking ReadJava 2024. 5. 14. 17:46
Java는 1.4 부터 기존 IO를 대체하기 위한 새로운 방식인 NIO가 추가 되었다.NIO의 큰 특징은 커널 영역 메모리에 접근이 가능하다는 것과 Non-Blocking Read/Write 이다.여담이지만 네트워크 통신 역시 소켓과 파일 디스크립터를 통한 읽기/쓰기로 동작하므로(모든것은 읽기/쓰기라고 하더라.) netty와 같은 고성능 네트워크 프레임워크를 보면 nio의 핵심 컴포넌트를 기반으로 동작하고 있다. 우리가 일반적으로 사용하는 웹 서버를 생각해보자.Blocking한 구조라면 하나의 요청을 처리할 때 응답이 올 때 까지 대기해야한다.여러 요청을 처리하기 위해서는 여러 스레드가 필요하다.즉, 멀티 스레드 구조가 되어야하며 요청 당 스레드가 할당되게 된다.하지만 스레드가 많아진다는 것은 컨텍스트 ..
-
[Java] Primitive VS ReferenceJava 2024. 1. 22. 17:19
자바로 코드를 작성하다보면 타입에 int(Primitive Type)를 쓸 때도 있고, Integer(Reference Type)를 쓸 때도 있다.사용할 때에는 autoBoxing(Primitive->Ref) 혹은 unBoxing(Ref->Primitive)가 되기 때문에 의식하지 않았지만, 어떤 차이가 있을지 문득 궁금해졌다.멘토님께 문의해보니 null 처리 관점에서 이 문제를 고민해보면 좋을 것 같다고 했다. [ Mybatis에서 찾은 예시 ]Mybatis가 쿼리 수행결과를 매핑하는 로직이 좋은 예시 같아 가져왔다.Mybatis는 C, U, D 로직을 수행하면 수행한 row 수를 반환한다.이 때 결과가 null 이면 개발자는 반환 타입으로 int를 써야할까 Integer을 써야할까? 간단하게 Myba..