2026-07-09사진: Unsplash 의 Luca Bravo개요Java 8부터 도입된 Optional은 NullPointerException을 방지하고 null 처리를 명시적으로 표현하기 위한 컨테이너 클래스입니다.그러나 실무에서 잘못 사용하면 오히려 코드가 더 복잡해지거나, null 체크 수준에 머무는 경우가 많습니다. 이번 글에서는 Optional의 올바른 사용 패턴과 피해야 할 안티패턴을 정리합니다.Optional 기본 생성 방법// 값이 있을 때Optional opt1 = Optional.of("hello");// null일 수도 있을 때Optional opt2 = Optional.ofNullable(getValue());// 빈 OptionalOptional opt3 = Optional.em..
2024-11-201. 방법 import com.amazonaws.util.IOUtils; public void fileToInputStream(File file) { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(file); // ... } catch (FileNotFoundException e) { throw new RuntimeException(e); }finally { if(fileInputStream != null){//스트림 객체 안전하게 제거 IO..
2024-03-29 1. 방법 import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; public class ImageResizer { public static final int MAX_WIDTH = 1920; public static final int MAX_HEIGHT = 1080; // 이미지 크기 조정 private BufferedImage resizeImage(BufferedImage originalImage) { int width = originalImage.getWidth(); int height = originalImage.getHeight(); // 이미지 크기가 최대 크기보다..
2024-02-16 1. 문제 발생 IDE에서는 src/main/.../test.properties 이런 식으로 사용해도 문제없이 동작을 했지만 -jar 파일로 생성 후 해당 부분을 그대로 쓰면 java.nio.file.NoSuchFileException 가 발생하게 된다. 2. 원인 배포시에 src/main/resources의 루트 경로가 target/classes 또는 build/classes로 변경되게 된다. 이를 위해 리소스 파일을 읽어 올 때는 동적으로 root를 잡을 수 있게 코드를 수정해야 한다. 3. 해결 방법 getClass.getClassLoader().getResourceAsStream('자신의 정적파일 위치')를 통해 자신이 위치시킬 파일의 정보를 읽어올 수 있다. private I..
2024-01-22 1. 정의 오토박싱은 Java 컴파일러가 기본 유형(원시타입)과 해당 객체 래퍼 클래스 간에 수행하는 자동 변환이다. 예를 들어 int를 Integer로, double을 Double로 변환하는 등의 작업을 뜻한다. 변환이 반대 방향으로 진행되는 경우 이를 언박싱(Unboxing)이라고 한다. 2. 예제 나머지(%) 및 단항 더하기(+=) 연산자는 Integer 객체에 적용되지 않으나, Java 컴파일러가 오류를 발생시키지 않고 메서드를 컴파일하는 이유는 런타임에 Integer를 int로 변환하기 위해 intValue 메서드를 호출하기 때문에 오류를 생성하지 않는다. 때문에 아래 예제에서는 오류 없이 동일한 값을 리턴한다. import org.junit.jupiter.api.Test; ..
2024-01-19 1. 예제 아래와 같이 싱글톤 패턴이 있다고 할 때 몇 가지 문제점이 발생할 수 있다. class SampleSingleton { private static SampleSingleton instance; public static synchronized SampleSingleton getInstance() { if (instance == null) { instance = new SampleSingleton(); } return instance; } } 2. volatile private static SampleSingleton instance; 위의 변수는 volatile 로 선언되어 있지 않아 멀티스레드의 환경에서의 안정성이 떨어질 수 있다. 멀티 스레드 환경에서는 각 스레드가 자체 ..