지금까지 JAVA에서 '제네릭'이라고 하면 그냥 T로 작성해서 어떤 객체든 들어올 수 있게 하는 것 정도로만 이해하고 있다가 이번에 인터넷 강의를 들으면서 제네릭이 생각보다 더 많이 쓰이고 더 많은 내용을 담고 있어서 한번 이해해 보고자 나름대로 정리해 봤다. JAVA 제네릭Java에서 제네릭(Generic)은 코드의 재사용성을 높이고 타입 안전성을 강화하기 위한 중요한 기능이다. 이번 포스트에서는 제네릭의 개념과 함께 TraceTemplate 클래스 예시를 통해 제네릭 메서드가 어떻게 사용되는지 자세히 살펴보겠다. 제네릭이란?제네릭은 코드를 작성할 때는 타입이 결정되지 않지만, 실행 시점에 타입이 결정되도록 하는 기법이다. 이는 주로 컴파일 타임에 타입 검사를 강화하고, 런타임 시 타입 안정성을 보장하..
프로그래밍 언어/JAVA
코드를 짜다가 foreach문을 중첩으로 사용하는 경우가 생각보다 자주 있다. 이를 더 개선할 방법이 없을까 하다가 이번에 새롭게 알게 된 문법을 소개해보려고 한다. Function.identity()Function.identity()는 Java 8에서 도입된 함수형 프로그래밍 인터페이스 중 하나인 Function 인터페이스의 정적 메서드이다. 이 메서드는 입력 값을 그대로 반환하는 함수 객체를 생성하는 데 사용된다. 즉, Function 타입의 객체로서, 입력 값을 변경하지 않고 그대로 반환한다.import java.util.function.Function; 예제: Function.identity() 사용다음은 Function.identity()를 사용하여 리스트를 맵으로 변환하는 예시 코드이다:i..
폴링(Polling) 사용해서 CompletableFuture 결과 확인하기 📌 서론 이전 글에서 CompletableFuture를 사용해서 서버에서 비동기를 적용한 내용을 작성했다. 그 후에 서버에서 비동기로 처리한 결과를 클라이언트에게 어떻게 알려줄까?라는 게 궁금해져서 해당 내용을 알아보았다. 🔻 CompletableFuture가 무엇인지 궁금하다면? 🔻 CompletableFuture를 활용한 비동기 메일 전송 구현 CompletableFuture를 활용한 비동기 메일 전송 구현 CompletableFuture를 활용한 비동기 메일 전송 구현 📌 서론 Java Mail Sender를 사용하여 메일 전송 기능을 개발하는 과정에서, 외부 라이브러리의 동기적 특성으로 인해 응답 시간이 길어지는 문제에 ..
CompletableFuture를 활용한 비동기 메일 전송 구현 📌 서론 Java Mail Sender를 사용하여 메일 전송 기능을 개발하는 과정에서, 외부 라이브러리의 동기적 특성으로 인해 응답 시간이 길어지는 문제에 직면했다. 이러한 문제를 해결하기 위해, 메일 전송 로직을 비동기적으로 처리하기로 결정하였고, 이 과정에서 CompletableFuture를 도입했다. CompletableFuture의 사용은 비동기 프로그래밍의 복잡성을 줄이고, 애플리케이션의 성능을 향상시키는 데 큰 도움이 되었다. 아래에서 Future와 CompletableFuture의 차이점, 그리고 실제 서비스 코드에 적용한 예를 통해 비동기 프로그래밍의 장점을 설명해보겠다. Future와 CompletableFuture 차이 기..
AtomicInteger를 활용한 파일 저장 순서 동기화 문제 해결 📌 서론 멀티스레드 환경에서 동기화 문제는 개발자에게 항상 도전적인 문제 중 하나다. 특히, 파일 업로드 기능을 구현할 때 여러 파일을 순차적으로 저장하려고 할 때, 동일한 순서 값이 중복되어 발생하는 문제는 더욱 복잡하다. 이 글에서는 Java의 AtomicInteger 클래스를 사용하여 이러한 동기화 문제를 어떻게 해결했는지 공유하고자 한다. 문제 상황 Spring Boot와 AWS S3를 사용하여 파일을 업로드하고 관리하는 레시피 관리 시스템을 개발 중이었다. 각 레시피에 여러 이미지 파일을 첨부할 수 있으며, 각 파일은 순서대로 저장되어야 했다. 그러나 여러 파일을 동시에 업로드할 때, 모든 파일의 순서(fileOrder)가 동일..
코드 최적화를 위한 매직 상수 사용법: 이점과 대안적 관리 방법 📌 서론 프로젝트를 개발하면서 매직 상수를 사용하는 일이 많이 있었다. 많은 경우에 final 키워드의 사용은 이해가 가지만, static 키워드까지 함께 사용하는 이유에 대해서는 궁금증이 생겼다. 이에 따라, 매직 상수를 활용하는 실제 사례와 final 그리고 static의 사용 목적을 탐구하고 정리해 보기로 했다. 이 글은 그러한 고민과 탐색의 결과를 담은 것으로, 매직 상수의 사용 이유와 그것이 개발에 미치는 영향을 분석해 봤다. 1. 매직 상수(Magic Constant)란? 매직 상수는 소스 코드 내에서 고정된 값을 가진 상수로, 이 값은 프로그램의 실행 동안 변경되지 않는다. 이러한 상수들은 주로 숫자나 문자열 형태로 나타나며, ..
JAVA Interface에서 접근 제한자 public과 private 활용하기 이전 회사에서 개발하면서 인터페이스를 사용할 때, 어떤 메소드는 public 접근 제한자를 명시하고, 어떤 메소드는 접근 제한자를 사용하지 않은 추상 메소드가 있었다. 인터페이스를 사용하면서 그 차이를 잘 알지 못했기 때문에 이 글에서 접근 제한자가 인터페이스 내에서 어떻게 사용되며, 이러한 사용이 어떤 의미를 가지는지 정리해봤다. 자바 인터페이스의 메소드 유형 자바 인터페이스는 코드의 유연성과 재사용성을 높이는 핵심적인 요소이다. 자바 8 이전과 이후의 버전에서 인터페이스의 역할과 구조는 중요한 변화를 겪었다. 자바 인터페이스는 소프트웨어 설계에서 중요한 역할을 수행한다. 특히, 접근 제한자의 사용은 인터페이스의 구조와 ..
람다 표현식에서 final 변수나 effectively final 변수를 사용해야 하는 이유 Java에서 람다 함수를 사용할 때 final 변수 또는 effectively final 변수를 사용해야 하는 이유에 대해서 알아보자. 자바에서 람다 함수를 사용할 때 'final' 변수 또는 effectively final 변수를 사용하는 이유는 자바의 클로저(closure) 구현과 관련이 있다. 클로저란 함수가 정의될 때의 스코프에 있는 변수들을 기억하고, 함수가 실행될 때 이러한 변수들에 접근할 수 있는 기능을 말한다. 일단 final 변수와 effectively final 변수의 개념부터 이해하자. final 변수와 effectively final 변수가 무엇인가 자바에서 'effectively final..