728x90 Language/Java158 [JAVA] Arrays.asList() vs new ArrayList() : 단순 변환과 새로운 생성의 결정적 차이 자바 개발을 하다 보면 배열을 리스트로 변환해야 하는 상황을 수없이 마주하게 됩니다. 이때 가장 흔히 사용하는 방식이 Arrays.asList()입니다. 하지만 어떤 경우에는 이 리스트에 데이터를 추가하려고 할 때 UnsupportedOperationException 에러를 만나 당황하기도 합니다. 반면 new ArrayList() 생성자를 이용하는 방식은 훨씬 자유로워 보입니다. 오늘은 이 두 방식의 메모리 구조적 차이와 가변성(Mutability)에 대해 심층적으로 파헤쳐 보겠습니다.1. Arrays.asList(): "배열의 리스트 뷰(View)"Arrays.asList()는 엄밀히 말해 새로운 리스트 객체를 완전히 독립적으로 생성하는 것이 아닙니다. 원본 배열을 '리스트라는 안경'으로 바라보게 해.. 2026. 1. 18. [JAVA] Deque 인터페이스 완벽 가이드 : 스택과 큐를 넘어선 팔방미인 자료구조 자바 프로그래밍에서 데이터를 효율적으로 관리하는 것은 애플리케이션의 성능을 결정짓는 핵심 요소입니다. 그중에서도 Deque(Double-Ended Queue)는 현대 자바 개발에서 가장 유연하고 강력한 선형 자료구조 중 하나로 꼽힙니다. 오늘은 단순히 '양방향 큐'라고만 알고 있었던 Deque의 깊은 내부 메커니즘과 실무에서의 선택 기준을 심층적으로 분석해 보겠습니다.1. Deque란 무엇인가? (Double-Ended Queue)Deque는 '덱' 또는 '데크'라고 발음하며, 이름에서 알 수 있듯이 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조입니다. 자바에서는 java.util.Deque 인터페이스로 정의되어 있으며, Queue 인터페이스를 상속받습니다. 이러한 구조적 유연성 덕분에 Deque는 상.. 2026. 1. 18. [JAVA] Stack과 Queue의 심층 분석 : 설계 철학부터 실무 활용 구현체까지 컴퓨터 과학의 가장 기본이 되는 자료구조를 꼽으라면 단연 Stack(스택)과 Queue(큐)일 것입니다. 자바(Java)는 이 추상적인 개념들을 단순한 라이브러리 제공을 넘어, 객체지향 설계 원칙에 따라 정교하게 구현해 두었습니다. 오늘은 자바 개발자로서 이 두 구조의 메커니즘을 이해하고, 실무에서 어떤 구현체를 선택하는 것이 최선인지 깊이 있게 탐구해 보겠습니다.1. Stack: 마지막에 들어온 데이터가 먼저 나간다 (LIFO)스택은 LIFO(Last-In, First-Out) 원칙을 따릅니다. 마치 식당에 쌓여 있는 접시 더미와 같습니다. 가장 마지막에 올려둔 접시를 가장 먼저 집어 들게 되는 원리입니다. 자바에서 스택은 메서드 호출의 실행 컨텍스트(Stack Frame)를 관리하거나, 뒤로 가기(U.. 2026. 1. 18. [JAVA] Vector vs ArrayList : 현대 자바 개발자가 ArrayList를 선택하는 결정적 이유 자바 언어를 학습하거나 면접을 준비할 때 가장 고전적이면서도 중요한 질문 중 하나가 바로 "Vector와 ArrayList의 차이점"입니다. 두 클래스 모두 List 인터페이스를 구현하며, 가변 크기의 배열을 다룬다는 공통점이 있습니다. 하지만 실무 환경에서는 ArrayList가 압도적으로 많이 사용됩니다. 왜 Vector는 역사의 뒤안길로 사라지고 있으며, 현대 자바 아키텍처는 왜 ArrayList를 선호하는지 심층적으로 분석해 보겠습니다.1. 탄생의 배경: 레거시와 현대적 설계Vector는 자바 1.0부터 존재했던 유물과 같은 클래스입니다. 당시에는 멀티스레드 환경에 대한 고려가 모든 클래스에 내장되어야 한다는 철학이 있었기에 모든 메서드에 synchronized 키워드가 붙어 있었습니다. 반면, A.. 2026. 1. 18. [JAVA] Comparable vs Comparator : 객체 정렬의 두 가지 핵심 전략 완벽 가이드 자바(Java)를 활용해 복잡한 데이터를 다루다 보면, 리스트나 배열에 담긴 객체들을 특정 기준에 따라 정렬해야 하는 상황을 마주하게 됩니다. 단순히 숫자나 문자열을 정렬하는 것을 넘어, 우리가 직접 정의한 '사용자 정의 객체'를 정렬할 때 자바는 두 가지 강력한 인터페이스를 제공합니다. 바로 Comparable과 Comparator입니다. 이 두 인터페이스는 모두 객체의 정렬 기준을 정의하기 위해 존재하지만, 그 '목적'과 '사용 시점'에는 명확한 차이가 있습니다. 오늘은 실무 개발에서 이 둘을 어떻게 구분하여 사용하는지, 그리고 왜 이러한 설계가 필요한지 심층적으로 분석해 보겠습니다.1. Comparable: "나는 나를 정렬할 수 있다" (자연스러운 순서)Comparable 인터페이스는 객체의 기본.. 2026. 1. 18. [JAVA] Iterator와 Enumeration의 결정적 차이 : 레거시와 현대적 설계의 이해 자바 언어가 발전해 온 역사를 돌이켜보면, 컬렉션의 요소를 순회하는 방식 또한 큰 변화를 겪어왔습니다. 그 중심에는 Enumeration과 Iterator라는 두 인터페이스가 존재합니다. 단순히 "둘 다 순회를 돕는 도구"라고 알고 있기에는 두 인터페이스 사이의 설계 철학과 기능적 차이가 매우 큽니다. 오늘은 자바 개발자라면 반드시 알아야 할 두 인터페이스의 심층적인 차이점과 왜 현대 자바에서는 Iterator를 권장하는지에 대해 분석해 보겠습니다.1. Enumeration: 자바의 초기 유산 (Legacy)Enumeration은 자바 1.0 시절부터 존재했던 가장 고전적인 인터페이스입니다. Vector나 Hashtable 같은 초기 컬렉션 클래스에서 데이터를 순회하기 위해 설계되었습니다. 기능은 매우 .. 2026. 1. 18. 이전 1 ··· 13 14 15 16 17 18 19 ··· 27 다음 728x90