본문 바로가기

Java

(5)
중복 데이터 검증 INSERT. MySQL INSERT IGNORE 분석 한줄 요약 : 유니크키로 INSERT IGNORE 사용시 성능이 좋지 않습니다. SELECT + INSERT 방식이 효율적입니다. 발단 - 반복되는 중복 검증 쿼리 프로젝트 기능 개발 하면서, 중복 안되게 데이터 삽입 해야하는 상황이 있었다.이때 유니크 키를 만들어 SELECT로 존재 검증후 + INSERT 쿼리를 날렸다.1. 유니크키 생성2. 데이터 존재성 검사 - SELECT 쿼리3. INSERT 쿼리 점점 프로젝트 기능이 생겨나고, 또 똑같은 중복 방지 삽입 기능이 요구되어서, SELECT + INSERT 쿼리를 사용해야 했다.앞으로도 이렇게 중복 검사를 해야하는 걸까? 내가 모르는 효율적인 중복 삽입 방지 쿼리가 있지 않을까?자연스럽게 궁금해졌다. 한방 쿼리 'INSERT IGNORE' ..
[Java] EnumMap 깊게 배우기 (HashMap보다 빠른 이유) 개요Enum을 Key로 사용하는 HashMap을 사용하고 있었다. 그러다 다른분들 코드를 보다가 Enum에 특화된 EnumMap 자료구조를 알게 됐다. 우선 내가 아는 정보는 다음과 같은데, Enum을 Key로 사용할때 HashMap대신 EnumMap을 사용한다면 성능상 이점이 있다는 정도이다.  EnumMap의 자료구조 특성을 정리해봤다. Chapter1. EnumMap 기본 이론 EnumMap의 JavaDoc 설명을 번역해서 정리한 내용은 다음과 같습니다. 1. Enum 타입 전용 MapEnumMap은 enum 타입 키 전용으로 최적화된 맵 구현체이다.맵에 사용되는 모든 키는 하나의 enum 타입에서만 가져올 수 있다.내부적으로 배열을 사용하므로 메모리 사용량이 작고 효율적이다.2. 키의 정렬 및 반..
[Java] 서비스 로더(ServiceLoader) - 소개 및 JAR 파일로 서비스제공자 배포해보기 서론ServiceLoader라는 키워드를 처음 들어보고 난 후, 공식문서를 번역해 보면서 공부해봤다. ServiceLoader는 인터페이스와 구현체들로 구성되어 있는데, 런타임 시점에 지연로딩으로 서비스들을 불러오도록 한다.공식 문서 (https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/ServiceLoader.html)를 읽다보면 흔하게 다음 용어들을 볼 수 있다. 서비스, 서비스제공자 서비스는 Inerface이고, 서비스 제공자는 Implement class 이다. 어떻게 ServiceLoader가 지연로딩으로 구현체들을 가져올수 있고, 또 어떻게 구현체들을 등록할 수 있는걸까? 아래 내용들은 공식문서 내용을 번역하고 GPT에..
[Java] 불변 객체란? 직관적으로 이해하는 불변 객체 서론자바 공부를 하다 보면 불변 객체를 배우게 된다. 불변 객체를 배우고 나서는 모든 객체를 불변 객체로 만들어야만 할 것 같다. 불변객체란 무엇이고 왜 좋다고 하는 걸까?본론 불변 객체란?1. 문제상황 : 공유참조로 인한 사이드 이펙트 발생 다음과 같은 상황이 있다고 하자.TV로 동물농장 채널을 재미있게 보고 있었는데, 갑자기 옆사람의 채널변경으로 내 TV까지 채널이 바뀐다면? 꽤나 당황스러울 것 같다.  엇.. 의도와는 전혀 상관없이, 다른 사람의 리모콘 조작이 내 TV 채널까지 영향을 미치는 상황이 발생했다. 이것이 바로 '사이드 이펙트' 문제입니다.더 큰 문제는 이런 상황이 복잡한 환경에서 발생할 때다. 예를 들어 목욕탕처럼 여러 사람이 TV를 보는 공간에서 이런 일이 발생한다면? 도대체 누가 채..
[자바 8 함수형 프로그래밍] 일급이란? 일급메서드 그리고 스트림API 목차시작하며: 일급 컬렉션에서 '일급'이란?메서드도 '일급 시민'이 될 수 있을까?'일급 메서드'의 필요성스트림 API에서 일급 메서드 사용 시 주의할 점메서드를 일급으로 다루는 변화: 전통적 코드 vs 자바 8 이후로또 미션 적용 예제: 이급에서 일급으로결론시작하며일급컬렉션에서 '일급' 이란?프로그래밍 언어의 핵심은 결국 값을 바꾸는 것입니다. 값의 변화는 프로그램의 상태를 바꿔가며, 우리가 원하는 결과를 얻기 위한 핵심적인 과정이죠. 그런데 어떤 요소를 '값'으로 취급할 수 있으며, 어떤 요소를 직접 전달하거나 반환할 수 있을지는 언어 설계에 따라 다릅니다. 자바 8 이전에는 메서드나 클래스를 값으로 직접 전달할 수 없었습니다. 변수나 '일급(First-Class) 컬렉션'과 달리, 메서드나 클래스는..