반응형

전체 글 152

ArrayList와 LinkedList의 차이점은? 언제 무엇을 사용해야할까?

솔직히 말하면...4년차까지 와서도 ArrayList만 쓰고 살았다.LinkedList? 면접 때나 나오는 얘기 아닌가 싶었는데,최근에 대용량 데이터 처리하다가 성능 차이를 체감했다.그때서야 진짜 차이를 알게 됐다.간단하게 구조 차이부터ArrayList - 배열 기반// 내부적으로는 이런 느낌Object[] elementData = new Object[10]; // 기본 크기 10연속된 메모리에 데이터를 저장한다. 인덱스로 바로 접근 가능.LinkedList - 노드 기반// 내부적으로는 이런 느낌class Node { Object data; Node next; Node prev;}각 노드가 다음/이전 노드의 주소를 가지고 있다. 체인처럼 연결됨.성능 차이 조회 성능 (get)// Arr..

Java 2025.09.16

데드락(Deadlock)이란? 실무에서 겪은 디버깅 사례와 ShedLock 적용기

데드락이란?데드락(Deadlock)은 두 개 이상의 프로세스나 스레드가 서로의 자원을 기다리며 무한정 대기하는 상황을 말한다. 마치 좁은 다리에서 두 차가 서로 마주보고 서있어 어느 쪽도 움직일 수 없는 상황과 비슷하다.간단한 데드락 예시일상생활로 비유하면 이런 상황이다:철수: "영희야, 네 펜 좀 빌려줘. 내 지우개 줄게."영희: "철수야, 네 지우개 좀 빌려줘. 내 펜 줄게."결과: 둘 다 상대방이 먼저 주기를 기다리며 영원히 대기...프로그래밍에서의 데드락 예시// 스레드 Asynchronized(lock1) { Thread.sleep(100); synchronized(lock2) { // lock2를 기다림 // 작업 수행 }}// 스레드 B (동시 실행)synchr..

코딩:개발일지 2025.08.31

Java에서 try-with-resources를 사용해야 하는 이유

try-catch-finally의 문제점기존 방식으로 파일을 읽는 코드를 보면:FileInputStream fis = null;try { fis = new FileInputStream("example.txt"); // 파일 읽기 작업} catch (IOException e) { e.printStackTrace();} finally { if (fis != null) { try { fis.close(); // 또 다른 try-catch 필요! } catch (IOException e) { e.printStackTrace(); } }}문제점:코드가 복잡하고 길어짐finally에서 또 다른 예외 처리 필요자원..

Java 2025.08.26

HashMap의 get() 메서드 동작 원리

HashMap이란?HashMap은 키-값 쌍을 저장하는 자바의 컬렉션 프레임워크다. 내부적으로 배열과 연결리스트(또는 트리)를 사용해 데이터를 관리한다.get() 메서드의 기본 동작1단계: 해시코드 계산HashMap map = new HashMap();map.put("apple", 100);int value = map.get("apple"); // 여기서 get() 동작 시작먼저 키("apple")의 hashCode() 메서드를 호출한다.2단계: 인덱스 계산해시코드를 배열 크기로 나눈 나머지로 배열 인덱스를 구한다.index = hashCode & (배열크기 - 1)3단계: 버킷 탐색계산된 인덱스의 버킷을 확인한다. 버킷이 비어있으면 null을 반환한다.4단계: 키 비교버킷에 데이터가 있으면 저장된 키와..

Java 2025.08.26

JDK, JRE, JVM의 차이점

자바 개발을 4년간 하면서 신입 때부터 지금까지도 가끔 헷갈리는 개념들이 있다.JDK, JRE, JVM이 대표적인데, 면접에서도 자주 나오고 실무에서도 중요한 개념이라 한 번 정리해보려고 한다.JVM (Java Virtual Machine) - 자바의 핵심정의와 역할자바 바이트코드를 실행하는 가상머신JVM은 자바의 "Write Once, Run Anywhere" 철학을 실현하는 핵심 기술이다.자바 소스코드가 javac로 컴파일되면 .class 파일(바이트코드)이 생성되는데,이를 실제 기계어로 번역해서 실행하는 것이 JVM의 역할이다.주요 구성요소클래스 로더: .class 파일을 메모리에 로드실행 엔진: 바이트코드를 기계어로 번역 (인터프리터 + JIT 컴파일러)메모리 영역: 힙, 메서드 영역, PC 레지..

Java 2025.08.24
728x90
반응형