Java 37

ArrayDeque는 언제 LinkedList보다 나을까?

자바에서 Queue를 구현할 때 흔히 LinkedList를 사용하는 경우가 많다. 나도 처음엔 아무 생각 없이 이렇게 작성했다:Queue queue = new LinkedList(); 하지만 이 코드는 충분히 동작은 하더라도, 성능 면에서 최적의 선택은 아니다.이번 글에서는 왜 ArrayDeque가 LinkedList보다 더 나은 선택인지, 그리고 실무에서 어떻게 적용할 수 있을지를 정리해봤다. 1. ArrayDeque가 더 나은 이유✅  ArrayDeque는 내부적으로 배열 기반 LinkedList는 각 요소가 노드 객체로 연결되는 구조메모리 사용량이 더 많다.캐시 적중률도 낮다.따라서 삽입, 삭제가 빠를 것처럼 보여도 실제론 느릴 수 있다.반면 ArrayDeque는 동적 배열 구조를 사용하기 때문에데..

Java 2025.04.01

Java Pattern 클래스 사용 시 반드시 알아야 할 주의점

Java에서 정규 표현식을 다룰 때 Pattern 클래스는 매우 중요한 역할을 한다. 하지만 Pattern을 잘못 사용하면 성능 저하나 예상치 못한 동작이 발생할 수 있다. 나는 실제로 프로젝트에서 정규식을 사용할 때 이러한 문제로 지적을 받은 경험이 있었고, 이를 해결하기 위해 Pattern 사용 시의 몇 가지 주의사항을 정리하게 되었다.   Pattern 클래스란 무엇인가?Pattern 클래스는 Java에서 정규 표현식을 다루기 위한 클래스이다. 주로 Pattern.compile(String regex) 메서드를 통해 정규식을 컴파일하고, 이를 기반으로 생성된 Matcher 객체를 사용해 문자열 매칭 작업을 수행한다. 예를 들어, 다음과 같은 코드로 정규식을 사용할 수 있다.Pattern patter..

Java 2025.01.13

효율적인 테스트 코드를 위한 도구 선택: AssertJ와 JUnit의 차이

테스트 코드를 작성할 때 사용하는 AssertJ와 JUnit의 기본 assert 메서드는 모두 검증 로직을 작성하기 위한 도구지만, 그 사용 방식과 기능, 제공하는 개발 경험에서 차이가 있다. 이 두 가지를 디테일하게 비교하여 설명하면 아래와 같다. AssertJAssertJ는 플루언트 API 스타일과 체이닝 방식으로 구성된 검증 라이브러리로, 테스트 코드의 가독성을 높이고, 복잡한 데이터 타입 검증을 쉽게 처리할 수 있도록 설계되었다. 1-1. 주요 특징플루언트 인터페이스: 메서드를 체이닝으로 연결하여 가독성이 높다. 테스트 코드의 의도를 자연스럽게 드러낼 수 있어 읽기 쉽다.데이터 타입 지원: 기본 데이터 타입뿐만 아니라 리스트, 맵, 배열, 날짜, 예외 등 다양한 데이터 타입을 위한 검증 메서드를 ..

Java 2025.01.10

Hashtable의 동기화(synchronization)

Hashtable의 동기화(synchronization)는 주로 메서드 수준에서의 동기화를 통해 이루어진다. 이는 Hashtable의 메서드들이 synchronized 키워드로 선언되어 있기 때문이다. 이 동작 방식에 대해 좀 더 구체적으로 살펴보면 다음과 같다 메서드 수준 동기화Hashtable의 대부분의 메서드가 synchronized 키워드를 사용하여 구현되어 있다. 이는 동시에 여러 스레드가 동일한 메서드에 접근하는 것을 차단함으로써 데이터의 일관성을 보장한다.예를 들어, 데이터를 삽입하거나 검색할 때 사용하는 put과 get 메서드의 구현은 아래와 같다. put 메서드의 구현public synchronized V put(K key, V value) { // Null 값 처리 if (k..

Java 2024.12.10

Hashtable의 정의와 구조

Hashtable은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조이다. 내부적으로는 배열과 해시 함수를 기반으로 동작하며, 빠른 데이터 검색과 삽입을 지원한다. Java에서는 java.util.Hashtable 클래스로 제공되며, 동기화를 기본적으로 지원한다는 점에서 HashMap과 차이가 있다.  잠깐, 여기서 Hashtable 의 동기화란?https://hgggny.tistory.com/entry/Hashtable%EC%9D%98-%EB%8F%99%EA%B8%B0%ED%99%94synchronizationHashtable의 구조Hashtable은 해시 함수(hash function)를 이용하여 데이터를 저장할 위치를 결정한다.키를 해시 함수에 전달하여 해시값을 생성한다.생성된 해시..

Java 2024.12.04

리스트 값을 교체할까, 추가할까? 자바 리스트 처리 방식의 이해

이번 글에서는 코드 리뷰에서 자주 발생할 수 있는 문제 중 하나인 리스트 값 처리 방식에 대해 다뤄보겠습니다. 특히, 리스트를 교체할지 추가할지에 대한 결정을 어떻게 해야 하는지, 간단한 예시를 통해 설명하겠습니다. 자바 리스트 초기화 문제자바에서 리스트를 사용할 때, 가장 기본적인 실수 중 하나는 리스트를 초기화하지 않고 값을 추가하거나 대체하려고 시도하는 것이다.리스트를 선언만 하고 초기화하지 않으면, 해당 변수는 null 상태로 남게 된다. 이후 리스트에 값을 설정하거나 추가하려고 하면 NullPointerException이 발생할 수 있다.  초기화하지 않은 리스트의 문제import java.util.List;public class ProductManager { private List pro..

Java 2024.09.25

Map의 EntrySet(), 그거 어떻게 쓰는건데 ! map 을 순회하는 방법

의미entrySet은 Map 인터페이스에서 제공하는 메서드 중 하나로, Map에 저장된 key-value 쌍을 Set 형태로 반환하는 메서드이다. 이 메서드는 Map.Entry 객체를 반환하는데, 이 객체는 Map의 각 엔트리를 나타낸다. 이를 통해 Map에 저장된 모든 항목을 하나의 Set으로 다룰 수 있게 된다. 동작 원리entrySet() 메서드는 Map에 저장된 key-value 쌍을 Set> 형태로 반환한다. Set이므로 중복된 엔트리는 없으며, 순서는 Map의 구현에 따라 달라진다. 예를 들어, HashMap은 순서를 보장하지 않지만, LinkedHashMap은 입력 순서를, TreeMap은 정렬된 순서를 보장한다. 사용법Map map = new HashMap();map.put("apple",..

Java 2024.09.24

@Nullable 어노테이션, warning: unknown enum constant When.MAYBE !

의미 @Nullable은 해당 필드, 메서드 인자, 또는 메서드의 반환 값이 null일 수 있음을 명시하는 어노테이션이다.이를 통해 코드에서 해당 요소가 null일 수 있음을 명확하게 표현하고, 개발자가 null 처리를 적절히 할 수 있도록 돕는다.이 어노테이션은 IntelliJ IDEA, Eclipse와 같은 IDE가 제공하는 정적 코드 분석에서 유용하게 사용되며, IDE가 자동으로 null 가능성을 경고해준다.  @Nullable 사용하는 상황메서드 파라미터해당 파라미터가 null일 수 있음을 명시하고, 호출 시 null을 허용하는 경우에 사용된다.메서드 반환 값메서드가 null을 반환할 수 있음을 표시하여, 반환 값을 받을 때 null 체크를 해야 함을 알린다.필드필드가 null 값을 가질 수 있음..

Java 2024.09.23

Java 문자열 비교, String의 "equals" 함수 알고 사용하자

운영 환경을 비교해 다른 로직을 구현하기 위한 코드를 작성하고 리뷰를 받던 중 받은 코멘트  º º º  문자열 비교를 할 때 순서가 중요하다고 생각하지 못했기 때문에이 코멘트는 equals 의 사용법에 대한 궁금증을 자극했다 - !     equals의미 equals 메서드는 Java에서 두 객체의 "논리적 동등성"을 비교하기 위해 사용된다. 즉, 두 객체의 내용이 같은지 비교하는 기능을 제공한다. == 연산자는 객체의 "참조"를 비교하는 반면, equals는 객체 내부의 값이 같은지를 비교한다. 기능 Java의 equals 메서드는 Object 클래스에서 상속받은 메서드로, 객체의 논리적 동일성을 확인할 때 활용된다. equals 메서드를 오버라이드하여 객체의 특정 필드나 상태를 비교할 수 있도록 ..

Java 2024.09.23

Transaction 과 예외 처리의 관계

지난번에 이어 exception 처리와 transaction 의 관계에 대해서 한번 더 꼬집어 보고자 글을 나누어 작성하게 되었다.    예외 처리와 트랜잭션 롤백 트랜잭션 관리에서도 예외 처리는 매우 중요하다.트랜잭션은 데이터베이스 작업의 논리적 단위로, 모든 작업이 성공적으로 완료되거나 모두 롤백되어야 한다.예외가 발생하면 트랜잭션을 롤백하여 데이터의 일관성을 유지해야 합니다.정상 트랜잭션: 모든 작업이 성공적으로 완료되면 commit을 수행한다.예외 발생 트랜잭션: 작업 도중 예외가 발생하면 rollback을 수행하여 이전 상태로 되돌린다. public void processTransaction() { Connection conn = null; try { conn = data..

Java 2024.06.11