Java 15

[Java] generic - 2

개요2026.03.03-[Java] generic - 1에서 generic이 무엇인지, 기본적인 개념 위주로 정리했다. 이번 글에서는 조금 더 세부적이고 소소한 내용을 정리한다. 타입 파라미터 할당 가능 타입generic 할당은 Reference 타입만 가능하다. int, double과 같은 원시(Primitive) 타입 대신 Integer, Double을 사용해야 한다. 클래스로 지정하기 때문에 개체 지향 프로그래밍의 다형성 원리도 적용된다. 예로 들어 Apple, Banana라는 두 개 클래스가 Fruit이라는 클래스의 자식 클래스일 때, generic에 Fruit이라고 지정하면 Apple, Banana도 취급할 수 있다.class Fruit { }class Apple extends Fruit {..

Java 2026.03.10

[Java] generic - 1

개요2026.02.25-[Java] ArrayList 등의 글에서 리스트 내 데이터 원소의 타입을 지정할 때 데이터 타입을 꺽쇠로 감싸서 지정하는데, 이는 제네릭(generic)이라는 개념이다. 뭔지 정확하게 모르고 사용을 해왔으니 이번 글에서는 generic에 대해서 조금 다뤄볼까 한다. genericgeneric은 사전적으로 '일반적인'이라는 의미를 가지고 있는데, Java에서는 하나의 값이 데이터 형식에 의존하지 않고 여러 데이터 타입을 가질 수 있도록 하는 방법을 의미한다. 다른 말로는 클래스 내에서 사용할 데이터 타입을 외부에서 지정하는 기법이라고 한다.ArrayList list = new ArrayList();주로 List 등에 사용되는데, List와 같은 자료구조를 직접 구현하여 배포하려고..

Java 2026.03.06

[Java] ArrayList

개요이번 글에서는 Java에서 매우 흔하게 사용하고 있는 ArrayList에 대해서 정리한다. ArrayListArrayList는 Array의 불편함을 해소하기 위해 나온 개념으로, 연속적인 데이터의 리스트이다.내부적으로 Object[]을 이용하고 있으며, 인덱스를 이용해 요소에 빠르게 접근할 수 있다. 배열과 다르게 크기가 가변적(동적 할당)이지만, 배열의 크기가 가득 찰 때마다 copy 하는 방식으로 크기를 조정하기 때문에 지연이 발생할 수 있다. 데이터를 중간에 삽입하거나 삭제하는 경우에는 리스트 내 공간 조정으로 인해 요소의 위치가 앞뒤로 이동하기 때문에 동작이 느리다. 사용법ArrayList를 사용할 때는 패키지를 import 해야 한다.import java.util.ArrayList; 아래..

Java 2026.03.04

[Java] Stream - 사용법

개요2026.02.10-[Java] Stream 개념에서 Java의 Stream 개념에 대해 알아보았다. 이번 글에서는 실제로 어떻게 사용하는지에 초점을 맞춰서 내용을 정리해 본다. 생성Stream은 데이터 집합인 컬렉션, 다시 말해 Array, List, Set, Map 등으로부터 생성할 수 있다. 컬렉션이 제공하는 stream 메서드를 사용해 Stream을 생성한다.List list = new ArrayList();list.add("Apple");list.add("Banana");list.add("Kiwi");Stream stream = list.stream(); 또는 Stream에서 제공하는 generate, iterate 메서드 등을 사용해서 생성하는 것도 가능한다. generate는 무한한 값..

Java 2026.02.24

[Java] Stream 개념

개요최근 기본적인 반복문과 조건문을 활용한 Java 코드를 AI에게 개선해달라 요청했더니 Stream이라는 개념을 가진 코드를 제안해주었다. 사용하고 유지보수를 하기 위해서는 관련 개념을 이해하고 있어야 할 것 같아 정리해보려고 한다. Stream프로그래밍 개발에서 Stream이란 '일련의 데이터 흐름'을 의미한다. 위키피디아의 경우에는 시간 상에 나타나는 일련의 데이터 요소로 정의하며 연속적인 데이터 흐름에 초점을 맞추고 있다.Java의 Stream은 이러한 데이터 흐름을 표준화된 방법으로 쉽게 처리할 수 있도록 지원하는 클래스 집합이다. 경우에 따라, 요소의 Stream에 함수형 연산을 지원하는 클래스라 정의하기도 한다. 다시 말해 Java Stream을 이용하여 데이터를 함수형 연산을 통해 표준화..

Java 2026.02.23

[Java] HashSet

개요2026.02.06-[Java] HashMap에서 HashMap에 대해서 살펴보았는데, 이번 글에서는 Set을 구현한 HashSet에 대해서 살펴본다. HashSet이름에서 추측할 수 있듯, HashSet은 Set 인터페이스를 구현한 클래스이다. 객체를 중복 저장할 수 없고 저장 순서를 유지하지 않는다는 Set의 성질을 그대로 이어받는다. 만약 순서를 유지해야 하거나 자동 정렬이 필요한 경우에는 LinkedHashSet, TreeSet과 같은 다른 구현 클래스를 사용하면 된다.Set은 중복을 허용하지 않기 때문에 보통 중복을 제거하기 위해 많이 활용한다. 또한 비선형 구조로 인덱스가 존재하지 않기 때문에 값을 추가하거나 삭제할 때에는 Set에 값이 있는지 확인할 필요가 있기 때문에 List에 비해 ..

Java 2026.02.13

[Java] HashMap

개요개발하고 있는 Java 애플리케이션에서 HashMap을 사용하는데, Java를 놓은지 오래 되었다보니 기본 개념만 겨우 기억하고 있다. 개발 진행에 필요한 개념을 다시 돌아보자. HashMapMap 인터페이스를 구현한 대표적인 Map 컬렉션이다. Map 인터페이스를 상속하고 있어 키와 값으로 구성된 Entry 객체를 저장하는 구조라는 Map의 성질를 그대로 갖고 있다. 키와 값은 모두 객체이며, 값은 중복을 허용하지만 키는 허용하지 않는다. 특히 HashMap의 경우에는 Hashing을 사용해 많은 양의 데이터를 검색하는 성능이 뛰어나다.내부에 키와 값을 저장하는 자료 구조를 가지며, 해시 함수를 통해 키, 값이 저장되는 위치를 결정하므로 사용자는 그 위치를 알 수 없다. 또한 삽입 순서와 저장 ..

Java 2026.02.12

[Maven] java.lang.IllegalStateException: Unable to load cache item

현상Ubuntu 서버에서 maven을 설치하여 Java 애플리케이션을 빌드하던 중 아래와 같은 에러가 발생하면서 실패했다.[ERROR] Error executing Maven.[ERROR] java.lang.IllegalStateException: Unable to load cache item[ERROR] Caused by: Unable to load cache item[ERROR] Caused by: Could not initialize class com.google.inject.internal.cglib.core.$MethodWrapper[ERROR] Caused by: Exception com.google.in..

Java 2024.06.27

[Java] 가변 인자 (varargs)

가변 인자 (Variable argument) 매개변수의 개수를 동적으로 지정하는 기능 JDK 1.5부터 추가되었으며, printf()가 가변 인자를 사용한 대표적인 메서드라고 할 수 있다. 가변 인자 기능이 없던 JDK 1.4 이하의 버전에서는 컬렉션 또는 배열을 이용해 여러 개의 인수를 처리했다. 컬렉션/베열 사용 예시 import java.util.Vector; public class main { public static void main(String args[]) { String[] str = {"a", "b", "c"}; Vector v = new Vector(); v.add("A"); v.add("B"); v.add("C"); print_val(str); print_val(v); } stati..

Java 2021.10.16

[Enum] 열거 타입

열거 타입(Enumeration type) 관련이 있는 상수의 집합 enum은 enumeration이라는 셈, 계산, 열거, 목록이라는 뜻의 영단어의 앞부분을 딴 예약어다. Java 1.5 이상부터 지원한다. enum을 사용하면 비교 시 값뿐만 아니라 타입까지 비교가 가능하며, 상수값이 재정의되더라도 재컴파일할 필요가 없다는 장점이 있다. 정의 클래스 정의하듯이 정의한다. enum NAME { VAL1, VAL2, VAL3 } // 예시 enum STATUS { START, RUNNING, STOP, TERMINATE } 열거형 변수 선언 및 초기화 마찬가지로 클래스 사용하듯이 사용한다. // 선언 NAME name; // 상수 접근 NAME.VAL1 // 예시 STATUS status = STATUS...

Java 2021.09.23
1 2