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 로 선언되어 있지 않아 멀티스레드의 환경에서의 안정성이 떨어질 수 있다. 멀티 스레드 환경에서는 각 스레드가 자체 ..
2023-11-08 1. swtich 패턴 개선 @Test public void test1(){ String today =""; int day = 1; switch (day) { case 1: today = "월"; case 2: today = "화"; case 3: today = "수"; case 4: today = "목"; case 5: today = "금"; case 6: today = "토"; case 7: today = "일"; } System.out.println(today); // 변수에 매번 할당 하는 방식에서 case 에 따라 바로 변수에 할당할 수 있게 변경 되었다. String today2 =""; int day2 = 1; today2 = switch (day2) { case 1 ->..