분류 전체보기 61

ArrayDeque - Java

ArrayDequeArrayDeque는 Java에서 제공하는 배열 기반 양방향 큐(Deque) 구현체입니다.LinkedList보다 더 빠르고, Stack과 Queue를 대체할 수 있는 고성능 자료구조입니다.null 요소는 저장할 수 없습니다.주요 특징자료구조배열 기반 (원형 배열)크기 조정필요 시 배열을 2배로 확장 (자동 확장)접근 속도양 끝에서 빠른 접근 가능 (O(1))삽입/삭제 속도front, rear 모두 O(1)중복 허용O (같은 값 여러 번 저장 가능)null 허용❌ (null 값 저장 시 NullPointerException)대표 메서드package structure.arraydeque;import java.util.ArrayDeque;public class ArrayDequeClass {..

자료구조 2025.04.28

Deque - Java

DequeDeque(Deque = Double Ended Queue, 양방향 큐) 는 양쪽 끝(front, rear) 모두에서 삽입과 삭제가 가능한 자료구조입니다.Java에서는 Deque 인터페이스를 제공하며, 일반적으로 LinkedList나 ArrayDeque로 구현합니다.구현체 비교 항목 LinkedList ArrayDeque 구조노드 기반 (이중 연결 리스트)배열 기반 (원형 배열 구조)삽입/삭제 속도양쪽 끝 삽입/삭제 빠름 (O(1))양쪽 끝 삽입/삭제 빠름 (O(1))중간 접근/수정느림 (O(n))불가능(중간 인덱스 접근 지원 안 함)메모리 사용각 노드마다 추가 메모리(포인터 2개) 필요배열 크기만큼 메모리 연속 확보 필요성능많은 삽입/삭제 작업에 유리빠른 삽입/삭제 + 메모리 효율성 높음 ..

자료구조 2025.04.28

Queue - Java

QueueQueue는 FIFO(First In First Out, 선입선출) 방식으로 동작하는 자료구조입니다.Java에서는 Queue 인터페이스를 통해 다양한 구현체(예: LinkedList, PriorityQueue)를 제공합니다.먼저 추가한 데이터가 가장 먼저 제거되는 특징이 있습니다.주요 특징자료구조노드 기반(LinkedList) 또는 배열 기반(예: ArrayDeque)크기 조정필요에 따라 동적으로 크기를 조정 (특히 LinkedList 기반일 경우)접근 속도front와 rear에서 빠른 접근 가능 (O(1))삽입/삭제 속도front에서 삭제, rear에서 삽입은 빠름 (O(1))중복 허용O (같은 값을 여러 번 저장 가능)null 허용일부 구현체에서는 허용 (LinkedList는 허용, Arra..

자료구조 2025.04.28

Stack - Java

StackStack은 LIFO(Last In First Out, 후입선출) 방식으로 동작하는 자료구조입니다.Java에서는 java.util.Stack 클래스를 통해 제공되며, 기본적으로 Vector를 상속받아 구현되어 있습니다.주요 특징자료구조내부적으로 Vector(배열 기반) 사용크기 조정요소 추가 시 내부 배열을 동적으로 확장 (필요 시)접근 속도top 요소 접근은 빠름 (O(1))삽입/삭제 속도top에 대한 push/pop은 빠름 (O(1))중복 허용O (같은 값을 여러 번 저장 가능)null 허용O (null 값 저장 가능)대표 메서드package structure.stack;import java.util.Stack;public class StackClass { private final St..

자료구조 2025.04.28

LinkedList - Java

지난 포스트인 ArrayList를 이어서 이번에는 LinkedList에 대해서 정리해보겠습니다.LinkedListJava 컬렉션 프레임워크(Collection Framework) 중 하나로, 노드 기반으로 구현된 자료구조입니다.각 요소(Node)가 **데이터(data)**와 **다음 노드(next)**에 대한 참조를 가지고 있어, 삽입과 삭제가 효율적입니다.주요 특징자료구조내부적으로 **노드(Node)**를 연결하여 구성크기 조정삽입/삭제할 때 별도 크기 확장이 필요 없음 (공간은 노드 단위로 동적으로 사용)접근 속도인덱스 접근 시 느림 (O(N)) (앞에서부터 순차 탐색)삽입/삭제 속도처음/끝 삽입·삭제는 빠름 (O(1)), 중간은 느림 (O(N))중복 허용O (같은 값을 여러 번 저장 가능)null ..

자료구조 2025.04.27

ArrayList - Java

이 글을 시작으로 알고리즘에서 자주 사용되는 자료구조의 주요 메소드를 정리하는 포스트를 작성해보겠습니다. 이번 포스트에서는 ArrayList 자료구조에 대해 정리해보겠습니다. ArrayListArrayList는 Java 컬렉션 프레임워크(Collection Framework) 중 하나로, 배열 기반으로 구현된 동적 크기 배열(Dynamic Array) 입니다.배열과 비슷하지만, 크기를 자동으로 조정해주기 때문에 요소를 추가하거나 삭제할 때 편리합니다.주요 특징자료구조내부적으로 배열(Array) 사용크기 조정배열이 꽉 차면, 자동으로 1.5배 또는 2배 크기로 확장접근 속도인덱스로 접근 시 빠름 (O(1))삽입/삭제 속도중간 삽입/삭제는 느림 (O(N)) (이동 필요)중복 허용O (같은 값을 여러 번 저장..

자료구조 2025.04.27

자료구조 정의

자료구조란사전적인 의미는 자료(Data)의 집합의 의미하며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것입니다.자료구조는 다음 그림과 같이 단순 자료구조(Primitive Data Structure)와 복합 자료구조(Non-Primitive Data Structure)로 나누어 집니다.복합 자료구조는 다시 선형 자료구조(Linear Data Structure)와 비선형 자료구조(Non-Linear Data Structure)로 구분됩니다.선형 자료구조선형 자료구조는 다음 그림처럼 데이터 요소를 순차적으로 연결하는 자료구조로, 구현하기 쉽고 사용하기도 쉽습니다. 배열(Array)과 링크드 리스트(Linked List), 스택..

자료구조 2025.04.27

Build

BuildBuild는 소스 코드와 리소스를 컴파일하고, 테스트 및 패키징하여 실행 가능한 형태로 만드는 과정입니다. 개발자가 작성한 코드를 컴퓨터가 이해하고 실행할 수 있는 형태로 변환하는 필수적인 작업입니다.Kotlin BuildKotlin Build Process를 그림으로 나타내면 다음과 같습니다. Kotlin 또한 JVM위에서 동작하기 때문에 Java의 빌드 과정과 매우 유사합니다. Java는 .java 파일을 Java Compiler를 통해 .class 파일로 변환을 하고 Kotlin은 .kt 파일을 Kotlin Compiler를 통해 .class 파일로 변환을 합니다. 해당 파일은 .class 파일은 Kotlin Runtime Library에 의존되어 실행합니다. (Kotlin Runtime..

Companion Object

Companion Objectcompanion object에 대한 정리에 앞서 먼저 Java의 어떤 기능과 유사한지부터 알아보겠습니다. Java에는 static 키워드가 존재합니다. 해당 키워드가 붙은 변수가 메소드는 클래스 로드 시에 메모리에 할당되며, 프로그램 종료 시까지 유지가 됩니다. 또한 모든 인스턴스에 공유되는 특징을 가지고 있습니다. Kotlin에서는 static이라는 키워드가 존재하지 않습니다. 대신 companion object 키워드를 가지고 static 키워드를 대신해 처리를 하고 있습니다. 먼저 Java의 코드를 살펴보겠습니다.public class Test { public static int count = 0; public static void print(){ ..

Nested Class, Inner Class

Nested Class, Inner ClassNested Class, Inner Class에 대한 예시를 간단하게 Java에서 어떻게 사용되는지 확인해보겠습니다.//외부 클래스public class Outer{ private int number; //정적 중첩 클래스 public static class NestedClass{ } //내부 클래스 public class InnerClass{ }} 먼저 클래스 내부에 클래스를 선언하는 것을 중첩 클래스라고 합니다. Java에서는 static 키워드 유무에 따라 중첩 클래스를 분류할 수 있습니다. static이 붙은 경우에는 정적 중첩 클래스(Static Nested Class)라고 칭하며 특징은 다음과 같습니다.Outer 클래스의 인스턴스가 없어도 생성이 가..