본문 바로가기

전체 글14

Java HashMap 충돌 처리 : 체이닝, LinkedList ↔ Tree 전환, 설계 원리와 내부 동작 분석 Java 컬렉션 중 하나인 HashMap은 매우 자주 쓰고 일반적으로 O(1)의 조회 성능을 기대할 수 있다.그 이유는 내부적으로 HashTable 구조를 기반으로 key의 해시값에 따라 배열의 인덱스를 계산하여 데이터를 저장하고 조회하기 때문이다. 그런데 여기서 생기는 “해시 충돌” 문제는 어떻게 해결되고 있을까?이 글에서는 그 과정을 개념 → 코드 → 의문점 → 추론 흐름으로 정리했다. 1. 해시 충돌(Hash Collision)이란?서로 다른 두 객체가 같은 hashCode() 값을 갖는 경우이다.결국 동일한 배열 인덱스에 저장되어 있음충돌이 발생함이렇게 동일한 버킷에 여러 객체가 들어가는 상황이 발생한다. 충돌 해결 방법 1. 체이닝(Chaining)같은 인덱스에 여러 엔트리를 연결 리스트나 트.. 2025. 8. 7.
[자료구조] ArrayList는 배열이 꽉찼을때 어떻게 하는가 Java의 ArrayList는 내부적으로 배열을 사용한다. 그런데 배열은 고정 크기를 가지고 있어서ArrayList가 꽉 찼을 때는 어떻게 새로운 데이터를 추가할수 있을까? 이번 글에서는 ArrayList의 내부 구현을 통해서 배열이 꽉 찼을 때 어떤 일이 벌어지는지 알아보겠다.1. 요소 추가 메서드 : add(E e)먼저 리스트에 요소를 추가하는 메서드인 add()를 알아볼것이다. 코드로 알아보자public boolean add(E e) { modCount++; add(e, elementData, size); return true;} 1-1. modCount++; modCount는 ArrayList의 부모 클래스인 AbstractList에 정의된 필드 이다. ✔️ modCount란?m.. 2025. 7. 31.
[Heap] 직접 구현하자 이 글은 Heap 자료구조에 대한 개념을 이해하고 있는 상태에서직접 구현해보며 내부 동작 원리를 학습하기 위한 목적으로 작성되었습니다. https://hyeonni.tistory.com/42Heap 의 기본 개념 포스터이다. 요구사항배열(Array)로 구현하기크기 동적으로 조절하기reference type 도 사용할 수 있도록 제네릭 적용사용자 정의 비교 기준 지원 (Comparator 활용) 기능생성자초기 공간 할당 X초기 공간 설정 메서드getParentIndex(int index) : 부모 노드 인덱스 반환getLeftChildIndex(int index) : 왼쪽 자식 인덱스 반환getRightChildIndex(int index) : 오른쪽 자식 인덱스 반환resize() : 내부 배열 크기.. 2025. 7. 20.
개발자로서의 가치관 - 함께, 그리고 긍정적인 영향 이 글은 fiat_lux의 개발자로서의 가치관,그리고 그 바탕이 되는 삶의 가치관을 기록하기 위해 작성한 글이다. 이 글을 쓰는 이유는 단순하다.시간이 지나면 사람도 바뀌고, 가치관도 변한다.그래서 지금의 생각을 기록해 두고,앞으로의 나에게 되돌아볼 기준점이 되었으면 한다. "나는 코드를 짜는 사람이 아니라,사람에게 영향을 주는 개발자가 되고 싶다"1. 삶의 가치관 – ‘함께’ “나는 어떤 것을 가치 있게 여기는가?”라고 묻는다면가장 먼저 떠오르는 단어는 ‘함께’이다. 세상은 혼자 살아가는 것이 아니라,사람들과 함께 살아가는 과정 속에서 의미가 생긴다고 믿는다.그래서 나는 자연스럽게 팀워크를 기반으로 한 활동을 좋아하게 되었다. 예를 들어 나는 평소에 게임을 할 때도 혼자 하는 것보다 팀 게임을 더 선호.. 2025. 6. 9.
개발자로의 전향 (2) - 개발은 삶과 닮아 있다 정답을 찾지 않아도 괜찮다.개발도, 삶도 결국은 ‘더 나은 선택’을 향한 여정일 뿐이니까.개발은 삶과 닮아 있다 프리코스를 마친 후, 우연히 한 책에서 인상 깊은 문장을 읽었다. “우리가 삶에서 불안함을 느끼는 이유는 정답만을 찾으려 하기 때문이다.하지만 그 정답은 누군가에겐 오답일 수도 있고, 애초에 정답이란 게 없을 수도 있다.” 이 문장을 읽으며 문득 깨달았다.개발도 마찬가지다.정답이 없는 개발, 정답이 없는 삶개발에는 하나의 정답이 없다.같은 문제도 사람마다 다른 방식으로 풀 수 있고,누군가에겐 깔끔한 코드가 다른 이에겐 낯설게 느껴질 수도 있다. 결국 개발은문제를 정의하고, 시행착오 속에서 나만의 방식으로 풀어나가는 과정이다.이 점에서 개발은 삶과 참 많이 닮아 있다. 내가 생각하는 삶 나는 .. 2025. 6. 2.
개발자로의 전향 (1) - 처음으로 내 선택이었던 공부, 그게 개발이었다 이 글은 fiat_lux의 개발자로 전향하게 된 여정을 담고 있다.나는 컴퓨터공학과가 아닌 정보보안 전공자였다. 얼핏 보면 비슷해 보이지만, 개발을 본격적으로 접할 기회는 많지 않았다. 처음부터 개발자가 되겠다는 뚜렷한 목표가 있었던 것도 아니었다. 그냥 남들처럼 전공 따라 취업하려고 했던 평범한 학생이었다. 1. 연구실에서의 첫 경험 3학년 1학기, 교수님 연구실에 들어가 연구원으로 활동하게 되었다.연구 주제는 AI 기반 데이터 분석과 논문 작성이었고, 이 과정에서 파이썬이라는 언어를 처음 접했다. 사실 학과 수업에서도 프로그래밍 언어를 배우긴 했지만, 그저 학점을 위한 공부에 불과했다. 과목이 끝나면 금세 잊혀졌고, 실전에서 쓸 수 있는 수준은 아니었다.하지만 연구실에서는 달랐다. 파이썬으로 직접 .. 2025. 6. 2.