Java 36

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

checked exception vs unchecked exception

최근 사수에게 PR 리뷰를 받던 중 exception 처리에 대해서 지적을 받았다.  사실 이제까지의 exception 처리는"내가 짠 코드가 에러가 발생했을 경우"를 고려한 것이 아닌다른 분들의 exception 처리와 동일하게 진행을 했었다.  그러나 사수와의 대화를 통해 예외 처리가 얼마나 중요한지, 그리고 이를 통해 코드의 안정성과 유지보수성이 어떻게 향상되는지 깨닫게 되었습니다.  오늘은 그 경험을 바탕으로 Java에서의 checked exception과 unchecked exception에 대해 이야기해 보려고 한다. 예외 처리의 중요성코드를 작성하다 보면 다양한 오류 상황에 직면하게 된다. 사용자가 잘못된 입력을 하거나, 파일이 존재하지 않거나, 네트워크 연결이 끊기는 등의 상황은언제든지 발..

Java 2024.05.26