DevLog/Java 7

IllegalStateException - 지금 상태에서 호출하면 안 되는 메서드

✅ java.lang.IllegalStateExceptionException in thread "main" java.lang.IllegalStateException: Already initialized at com.example.Initializer.init(Initializer.java:18) 🔍 자주 발생하는 케이스1. 이미 초기화된 상태에서 다시 초기화 시도public class Initializer { private boolean initialized = false; public void init() { if (initialized) { throw new IllegalStateException("이미 초기화되었습니다."); } initia..

DevLog/Java 2025.05.18

java.lang.IllegalArgumentException - 메서드 호출이 잘못됐다는 신호

✅ java.lang.IllegalArgumentExceptionException in thread "main" java.lang.IllegalArgumentException: Width must be greater than zero at com.example.ImageResizer.resize(ImageResizer.java:42) 🔍 자주 발생하는 케이스1. 유효하지 않은 값이 들어왔을 때public void setAge(int age) { if (age 메서드에 유효하지 않은 값이 전달되었을 때 사용자가 명시적으로 던짐2. 외부 라이브러리 내부에서 발생Files.readString(Path.of("")); // IllegalArgumentException비어있는 경로나 null 값을 넘..

DevLog/Java 2025.05.18

java.util.ConcurrentModificationException - 반복문에서 리스트 수정하면 생기는 문제

✅ java.util.ConcurrentModificationExceptionException in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1043) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:997) 🔍 자주 발생하는 케이스1. for-each 문에서 remove 시도List list = new ArrayList(); list.add("a"); list.add("b"); for (String item : list) { if (item.equ..

DevLog/Java 2025.05.18

java.lang.NullPointerException - 왜 null인지 모를 때

✅ java.lang.NullPointerExceptionException in thread "main" java.lang.NullPointerException at com.example.MyClass.myMethod(MyClass.java:10) 🔍 자주 발생하는 케이스 1. Spring에서 주입 실패@Autowired private SomeService service; service.doSomething(); // 여기서 NullPointerException원인: 해당 빈이 스프링 컨텍스트에 등록되지 않았거나, 컴포넌트 스캔 대상이 아님해결: @Component, @Service, @Repository 등 어노테이션 누락 여부 확인2. Map에서 존재한다고 착각한 keyMap userMap = n..

DevLog/Java 2025.05.18

MySQL 오류: Illegal mix of collations for operation 'like'

Illegal mix of collations (utf8mb4_0900_ai_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation 'like' Illegal mix of collations for operation 오류는MySQL에서 문자열 비교 연산(LIKE, =, IN)을 수행할 때, 비교에 사용되는 문자열들의 collation이 서로 다를 경우 발생한다. 그중에서 'LIKE' 오류는 LIKE 비교 연산에서 좌변과 우변의 collation이 일치하지 않거나, 우변 내부의 구성 요소들끼리 collation이 달라 발생한다. ✅ Character Set과 Collation 개념 정리1. Character Set (문자 집합)데이터를 어떤 문자..

DevLog/Java 2025.05.01

Gradle 의존성 정리

implementation, api, compileOnly, runtimeOnly 차이?이름만 보고 쓰기엔 헷갈려서 정리해두기로 했다. ✅ 기본 개념 요약키워드상황컴파일 시 포함실행 시 포함다른 모듈에서 사용implementation내부 구현용. 외부에는 노출하지 않음✅✅❌api외부에 노출되는 라이브러리✅✅✅compileOnly컴파일만 필요. 실행 시엔 없어야 함✅❌❌runtimeOnly런타임에만 필요. 컴파일엔 불필요❌✅❌ 📌 키워드별 설명과 예시1. implementationimplementation 'org.springframework.boot:spring-boot-starter-web' 대부분의 의존성은 이걸로 선언하면 충분하다.implementation은 다른 모듈에서 이 모듈을 의존하더라도..

DevLog/Java 2025.04.25

Java와 Spring Boot 버전 조합 정리

Java 몇 버전에 Spring Boot 뭐 써야 하지?그래서 그 결과를 LTS 중심으로 정리해두기로 했다. ✅ Java 버전별 특징 (LTS 기준)버전출시주요 특징비고82014람다, Stream API, Optional, java.time레거시의 주력, 여전히 많이 사용됨112018var, HttpClient, isBlank, GC 개선Java 8 이후 가장 안정적으로 자리잡은 버전172021record, sealed class, switch 개선, 텍스트 블록Spring Boot 3.x의 최소 요구 버전212023패턴 매칭, 가상 쓰레드 (Virtual Threads)최신 LTS, 일부 기능은 실험적 적용 단계💡 Java는 8 이후로 6개월 주기의 릴리스 체계를 따르며, 주요 LTS는 11, 17,..

DevLog/Java 2025.04.25