목록자바 (9)
변수의 기록
불변 객체란 뭘까?프로그래밍 하다 보면 "이 객체 상태가 바뀌면 안 되는데..." 싶은 순간이 있죠.그럴 때 딱 맞는 개념이 바로 불변 객체(Immutable Object)입니다.불변 객체는 한 번 만들면 내부 상태가 절대 바뀌지 않는 객체를 말해요.객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다.쉽게 말해, 생성 이후에는 그냥 읽기 전용! (read-only) 왜 불변 객체가 좋을까?.1. 코드가 깔끔하고 안전함상태가 안 바뀌니까 예상 못 한 사이드 이펙트도 없고, 디버깅도 쉬워져요.특히 협업할 때 다른 사람이 뭘 건드릴까 걱정 안 해도 되는 게 제일 큼.2. 자료구조와 찰떡궁합Map, Set, Cache 같은 데서 많이 쓰이는데,값이 안 ..

사용자 정의 객체와 HashSet, HashMap에서의 중복 처리자바에서 HashSet이나 HashMap 같은 해시 기반 컬렉션은 객체의 중복 여부를 판단하기 위해 내부적으로 hashCode()와 equals() 메서드를 사용한다. 이 글에서는 개발자가 직접 정의한 클래스를 해시 테이블에 넣을 때, 중복을 어떻게 처리하고, 주의할 점은 무엇인지 정리한다.1. 중복 판단 기준HashSet이나 HashMap은 객체를 저장하거나 검색할 때 다음 절차를 따른다:hashCode()로 해시값을 계산 → 어느 버킷(인덱스)에 저장할지 결정해당 버킷 안에서 equals()로 같은 객체인지 판단즉, 같은 해시값을 가지면서 equals()도 true여야 동일한 객체로 간주되어 중복 저장이 되지 않는다.2. 개발자가 해야 ..

1. Set이란 무엇인가? (ADT 관점)Set은 데이터를 저장하는 추상 자료형(ADT) 중 하나입니다.특징적으로 다음과 같은 성질을 가집니다:중복을 허용하지 않는다요소의 순서를 보장하지 않는다데이터의 존재 유무를 빠르게 확인할 수 있다이러한 동작을 제공하는 구조만 정의된 것이 Set이라는 ADT이고,Java에서는 Set 인터페이스와 이를 구현하는 다양한 클래스(HashSet, LinkedHashSet, TreeSet)를 통해 이 ADT를 실현합니다.2. Set의 사용 목적 및 언제 사용하는가✅ Set이 유리한 상황중복 제거가 필요한 경우→ 예: 사용자 입력값 정제, 태그 중복 제거 등순서가 중요하지 않은 데이터 집합→ 예: 허용된 IP 주소 목록, 이미 방문한 노드 기록 등특정 데이터가 존재하는지 여부..

1. Map의 개념핵심 특징Key - Value 쌍으로 구성Key는 중복 불가, Value는 중복 가능Key를 기준으로 빠르게 검색 및 저장 가능Java에서는 Map 인터페이스를 통해 이 ADT를 정의하고, 여러 구현체를 제공합니다.2. Map의 주요 구현체구현체특징HashMap내부적으로 Hash Table 구조 사용. 평균 O(1) 접근TreeMap내부적으로 Red-Black Tree 기반. O(log n) 접근LinkedHashMap해시 구조 + 삽입 순서 유지이 글에서는 가장 널리 사용되는 HashMap을 기준으로 설명합니다.3. Hash Table 기반 Map 구조HashMap은 내부적으로 다음 구조를 가집니다:📌 구성 요소배열: 일정 크기의 버킷 공간 (예: 8, 16 등)Hash 함수: Ke..

Java에서는 데이터를 저장할 때 다양한 형태의 배열 구조를 사용할 수 있습니다.세 가지 대표적인 구조인 기본 배열(Array), 동적 배열(Dynamic Array), 연관 배열(Associative Array)의 개념과 내부 동작 원리를 설명하겠습니다.1. 배열 (Array)배열은 같은 타입의 데이터를 일정한 순서로 나열하여 저장하는 자료구조입니다. Java에서 배열은 다음과 같은 특성을 가집니다:📌 특징동일한 데이터 타입만 저장 가능→ 예: int[], String[] 등고정 크기→ 생성 시 크기를 지정하면 이후 변경 불가연속된 메모리 공간에 저장→ 메모리의 주소가 연속적으로 할당되어 있음인덱스를 통한 접근→ 0부터 시작하는 정수 인덱스를 사용하여 요소 접근 int[] nums = new int[..
먼저 이 글을 쓰게 된 시작 점은 treeMap을 굳이 왜 써야할까? 어떤 상황에서 사용하면 이점이 클까? 그리고 어떤 구조로 관리가 될까? DB에서 원하는 정렬된 값을 받아와 hashmap에 담으면 되는데? 라는 아주 얇팍한 지식으로 시작됐다....정리 시작해 보겠습니다. Java Map 컬렉션 정리 – HashMap, LinkedHashMap, TreeMap1. Map 컬렉션이란?Map은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조다.중복된 키는 허용하지 않으며, 각 키는 하나의 값만 가질 수 있다.Java에서 대표적인 Map 구현체는 아래 3가지다.HashMap: 기본 해시 기반 MapLinkedHashMap: 순서 보장 + 해시 기반 MapTreeMap: 정렬 기반 Map2...
1. 스레드 덤프란?스레드 덤프는 실행 중인 자바 애플리케이션의 모든 스레드 상태를 출력한 스냅샷이다.서버에서 응답 지연, 무한 대기, CPU 사용률 급증, 데드락 등이 발생했을 때, 그 원인을 파악하기 위한 주요 도구로 사용된다.스레드 덤프를 분석하면 다음을 확인할 수 있다:현재 어떤 스레드가 실행 중인지어떤 스레드가 락을 점유하고 있는지, 어떤 스레드가 락을 기다리고 있는지데드락 여부 및 락 경합 병목 구간2. 스레드 덤프 생성 방법2.1 jstack 명령어 (권장)jps # 현재 실행 중인 Java 프로세스 ID 확인jstack # 스레드 덤프 출력jstack > threaddump.txt # 파일로 저장2.2 kill -3 (Linux/UNIX/macOS)kill -3 ..