Java 107

타입 변수

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.타입 변수란?핵심 요점:클래스나 메서드를 만들 때, 데이터 타입을 고정된 타입(Object 등) 으로 하지 않고, 변수처럼 일반화된 타입(E 등) 으로 지정하는 방식.이게 바로 지네릭 클래스입니다. public class ArrayList extends AbstractList { private transient Object[] elementData; public boolean add(Object o) { ... } public Object get(int index) { ... }}Object로 작성된 add()나 get() 메서드는 모든 타입을 받을 수는 있지만, 꺼낼 때 형변환(casting) 을 해야 합니다.예: String s ..

Java 2025.06.25

지네릭스

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.ClassCastException 예외 발생 예제ArrayList list = new ArrayList();list.add(10); // Integerlist.add(20); // Integerlist.add("30"); // StringInteger i = (Integer)list.get(2); // 형변환 시도❗ 핵심 포인트ArrayList를 제네릭 없이 생성하면 내부 타입은 Object로 처리됩니다.list.add(10)과 list.add(20)은 Integer 객체를 넣은 것이고,list.add("30")은 String 객체를 넣은 것입니다.그런데 list.get(2)으로 꺼낸 "30"을 Inte..

Java 2025.06.25

컬렉션 클래스 정리 & 요약

List 계열: 순서 O, 중복 OSet 계열: 순서 X (기본), 중복 XMap 계열: Key-Value 쌍으로 저장그리고 그 안에서도,Hash 기반: 빠른 검색Linked 기반: 순서 유지Tree 기반: 정렬된 순서 유지 ArrayList, Vector, Stack – 배열 기반 List공통점: 내부적으로 배열(Object[])을 사용함 → 빠른 인덱스 접근 가능ArrayList동기화 ❌ (멀티스레드 환경에선 주의)삽입/삭제는 느림 (중간에 끼워넣으면 뒤로 밀려남)가장 일반적인 리스트VectorArrayList와 동일하지만, 동기화 기능 내장오래된 클래스 (과거의 자바 프로그램에서 볼 수 있음)StackVector를 상속받음LIFO 구조 (후입선출) → push(), pop() LinkedList –..

Java 2025.06.24

Colections의 메서드

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 컬렉션 채우기, 복사, 정렬, 검색 등Java에서는 컬렉션을 조작할 수 있는 다양한 static 메서드를 Collections 클래스에서 제공합니다. 대표적인 것들:fill() – 리스트 전체를 하나의 값으로 채움copy() – 리스트 내용을 복사sort() – 정렬binarySearch() – 이진 탐색이 메서드들은 대부분 정적(static) 메서드이고, java.util.Collections 클래스에 있음. 컬렉션의 동기화 – synchronizedXXX()멀티스레드 환경에서는 동기화가 중요합니다. 여러 스레드가 동시에 한 컬렉션에 접근하면 문제가 생기므로, 동기화를 적용합니다.메서드 설명synchronizedCollection(Collecti..

Java 2025.06.24

HashMap

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. HashMap과 Hashtable의 관계와 구조기본 개념 요약Map 인터페이스는 (키, 값) 쌍의 데이터 저장을 정의합니다.HashMap, Hashtable, LinkedHashMap, TreeMap은 Map 인터페이스를 구현한 대표적인 클래스입니다. HashMap vs Hashtable항목HashMapHashtable동기화❌ 동기화 안됨 (멀티스레드 환경에 부적합)✅ 동기화됨 (멀티스레드 환경에서도 안전)버전비교적 최신오래된 클래스성능빠름상대적으로 느림지금은 거의 HashMap 사용을 권장하며, Hashtable은 레거시 코드에서만 사용됨. HashMap의 종류HashMap: 기본 키-값 저장용, 순서 보장 안 됨LinkedHashMap: 입력 ..

Java 2025.06.24

TreeSet

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. TreeSet의 개념과 구조 이해TreeSet이란?TreeSet은 Java에서 제공하는 Set 컬렉션 중 하나로, 정렬된 순서로 데이터를 저장합니다.내부적으로 이진 탐색 트리(Binary Search Tree) 구조를 사용합니다.이진 탐색 트리는 각 노드가 최대 2개의 자식 노드만 가지며,왼쪽에는 부모보다 작은 값,오른쪽에는 부모보다 큰 값을 저장합니다.이진 탐색 트리(Binary Search Tree)한 노드는 최대 두 개의 자식 노드를 가짐값의 크기를 기준으로 왼쪽 자식(작은 값), 오른쪽 자식(큰 값)에 저장노드 연결은 LinkedList처럼 포인터로 연결되어 있음(TreeNode left, TreeNode right)일반적인 연결 구조와의 ..

Java 2025.06.24

HashSet

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. HashSet의 기본 개념 및 Set 계층구조 이해HashSet의 성질순서가 없음 (순서 X)중복 불가 (중복 X)즉, List와 반대로 "순서를 유지하지 않으면서 중복을 허용하지 않는" 컬렉션입니다.계층 구조HashSet은 Set 인터페이스를 구현한 대표적인 클래스입니다.Set 인터페이스의 하위에는 SortedSet, 그 하위에는 TreeSet이 있고,TreeSet: 정렬된 상태로 저장되는 SetHashSet: 정렬도 안 되고 순서도 없음순서를 유지하려면?HashSet은 순서 없음.➡ LinkedHashSet을 사용하면 입력한 순서를 유지할 수 있음TreeSet은 정렬 기반값의 범위 검색 (from ~ to)이나 정렬된 데이터 유지가 필요할 때 ..

Java 2025.06.24

Comparator와 Comparable

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. Comparator와 Comparable의 개념목적: 정렬 기준을 정의하기 위한 인터페이스Java에서는 객체 배열을 정렬할 때 "정렬 기준" 이 필요합니다.이 기준을 제공하는 것이 바로 Comparable과 Comparator 인터페이스입니다. Comparable (기본 정렬 기준 제공)public interface Comparable { int compareTo(Object o); // 자기 자신(this)과 o를 비교함}사용 목적:클래스 자체에 "기본 정렬 기준"을 심어줄 때 사용예: String, Integer, Float, Date 등은 이미 Comparable 구현되어 있음예시: String은 사전순 정렬되도록 compareTo()가..

Java 2025.06.23

Arrays의 메서드

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. Arrays의 메서드 (1) - 복사copyOf()int[] arr = {0, 1, 2, 3, 4};int[] arr2 = Arrays.copyOf(arr, 3); // 결과: [0, 1, 2]copyOfRange()배열의 일부 범위만 복사할 수 있음 (끝 인덱스는 포함 안 함)int[] arr3 = Arrays.copyOfRange(arr, 2, 4); // 결과: [2, 3] Arrays의 메서드 (2) - 채우기, 정렬, 검색fill()배열의 모든 요소를 같은 값으로 채움int[] arr = new int[5];Arrays.fill(arr, 9); // → [9, 9, 9, 9, 9]setAll()람다식으로 각 요소의 값을 설정 가능i..

Java 2025.06.23

Iterator, ListIterator, Enumeration

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다. 핵심 개념 정리용어의미특징Iterator컬렉션 요소를 순서대로 읽는 인터페이스가장 일반적ListIterator양방향 조회 가능 (이전, 다음 이동)List에서만 사용Enumeration예전 버전의 Iterator읽기 전용, 기능 제한 왜 Iterator가 필요할까?컬렉션(List, Set 등)에 저장된 요소를 하나하나 꺼내서 처리하려면 반복문이 필요합니다.하지만 각 컬렉션마다 내부 구조가 달라서, 반복문을 직접 만들기엔 불편함이 많습니다.그래서 Java는 공통적으로 사용할 수 있도록 Iterator 인터페이스를 제공합니다. Iterator 인터페이스 정의public interface Iterator { boolean hasNext(); //..

Java 2025.06.23