자바19 Java Concurrent Map: 스레드 안전성을 보장하는 Atomic 메서드 소개 멀티스레드 애플리케이션에서는 데이터의 일관성과 스레드 안전성을 보장하는 것이 매우 중요하다. Java는 이러한 요구를 충족시키기 위해 다양한 동시성 컬렉션 클래스를 제공한다. 이번 포스팅에서는 Java ConcurrnetMap을 사용하여 스레드 안전성을 보장하는 방법에 대해서 소개한다.특히 computeIfAbsent, computeIfPresent, merge, putIfAbsent와 같은 원자적(atomic) 메서드들을 중점적으로 살펴보고자 한다. java.util.concurrent 패키지java.util.concurrent 패키지는 Java5에서 도입된 패키지로, 멀티스레드 프로그래밍을 보다 쉽고 효율적으로 할 수 있도록 다양한 동시성 유틸리티를 제공한다. 이 패키지는 고성능 멀티스레드 애플리케이.. 자바 2024. 6. 10. java - 디렉토리 삭제 + 특정 조건의 파일 삭제하기 코드를 통해서 디렉터리를 삭제하고자 하는 경우에는 해당 디렉터리가 clean 한 상태에서 삭제를 해야 한다. 하위 디렉토리를 포함하여 디렉터리에 파일이 없더라도 하위 디렉터리 역시 없어야 삭제가 가능하다. 이번 포스팅에서는 다음과 같은 방법으로 디렉토리를 삭제하는 방법을 적어보고자 한다. File 클래스 Files 클래스 apache commons io 라이브러리의 FileUtils 디렉터리를 삭제하기 위해서는 기본적으로 파일 목록을 가져와서 처리해야 하는데 디렉터리의 파일 목록을 추출하는 코드에 대해서는 아래 포스팅을 참고하기 바란다. 2023.11.04 - [자바] - [Java] 특정 디렉토리의 파일 목록 가져오기 샘플 디렉토리 구조 삭제 대상 디렉토리 구성은 다음과 같다. File 클래스를 이용한.. 자바 2024. 3. 31. java 21 - Record Patterns 소개 Java의 pattern matching 도입 이후 구문 단순화와 코드 가독성 및 안전성 향상을 목표로 점진적으로 발전해 왔다. switch 표현식에서의 pattern matching, instanceof에 대한 pattern matching이 대표적이다. 이번 포스팅에서는 이전 버전의 preview 기능을 거쳐 java 21에서 정식 릴리즈된 Record Patterns에 대해서 소개하고자 한다. 이전에 다뤘던 pattern matching에 대해서는 아래 포스팅에 정리해 보았다. 2023.08.26 - [자바] - jdk pattern matching for switch jdk pattern matching for switch jdk 17 이전 릴리즈 에서는 switch 문의 선택자 표현식은 숫자, .. 자바 2024. 3. 20. apache tika 라이브러리를 이용하여 일반 문서 및 암호화된 문서의 정보 알아보기 Apache tika 라이브러리는 문서 파일에 대한 Mime Type을 탐지하고 파일의 내용과 여러 항목의 메타데이터를 추출할 수 있는 기능을 제공하는 라이브러리다. 단순히 파일의 확장자가 아닌 실제 파일의 내용을 기반으로 한 Mime Type을 알아야 해당 Mime Type에 맞는 적절한 파일 컨트롤을 할 수 있다. 이번 포스팅에서는 Tika 라이브러리를 사용하여 파일에 대한 Mime Type과 여러 가지 메타데이터를 추출하는 방법과 함께 MS Office, PDF 문서에 비밀번호가 설정된 경우에도 Mime Type을 확인해 볼 수 있는 방법을 소개하고자 한다. apache tika 라이브러리는 3.0.0-BETA 베타 버전과 함께 릴리즈된 2.9.1 버전까지 나와있다. 각 버전에 대한 릴리즈 노트는 .. 자바 2024. 3. 8. java21 - scoped value에 대해서 알아보자 최근에 릴리즈 된 java 21 기능에 범위 지정 값(이하 scoped value) API가 preview 기능으로 제공된다. scoped value API는 메서드 매개변수를 사용하지 않고 메서드에 안전하고 효율적으로 데이터를 공유할 수 있도록 한다. 특히 java21에 릴리즈 된 가상 스레드를 사용할 때 ThreadLocal을 사용하면서 발생할 수 있는 문제에 대해서 scoped value 기능은 ThreadLocal에 대한 문제들을 해결할 수 있을 것이다. 이번 포스팅에서는 scoped value에 대한 도입 배경과 ThreadLocal 사용에 대한 문제와 함께 scoped value를 사용하는 방법에 대해서 정리해 보고자 한다. scoped value History scoped value에 대한 .. 자바 2023. 11. 26. java 21 처리량 향상을 위한 대안 - virtual thread 알아보자 2023년 9월 21일에 java 21이 배포가 되었다. java 21에서 새롭게 소개된 항목 중 하나가 기존의 스레드보다 더 경량화되어 설계된 virtual thread (가상 스레드)라고 할 수 있겠다. 이번 포스팅에서 새롭게 소개된 virtual thread(이하 가상 스레드)에 대해서 정리해 보고자 한다. 기존 스레드 모델의 문제점 전통적인 스레드는 java.lang.Thread 클래스의 인스턴스이다. 플랫폼 스레드라고 불린다. 플랫폼 스레드 플랫폼 스레드(user thread)는 OS 스레드(kernel thread)와 1:1 맵핑된다. 사용가능한 플랫폼 스레드의 수는 OS 스레드 수로 제한된다. 운영 체제에서 유지 관리하는 비교적 큰 스레드 스택 및 리소스가 소모되어 제한적일 수 있다. 플랫폼.. 자바 2023. 11. 24. [Java] 특정 디렉토리의 파일 목록 가져오기 Java API를 사용하여 숨겨진 파일을 포함하여 디렉터리에 있는 모든 파일을 재귀적으로 가져오는 방법에 대해서 알아보자. Files.list() Files.walk() DirectorySystem File.listFiles() File.listFiles(filter) Stream.filter() 테스트를 위한 샘플 디렉토리 구조는 다음과 같다. sample-directory의 절대경로는 /java-project/blog/filelist/sample-directory이다. Directory의 파일만 리스팅 Files.list()를 이용한 파일 목록 스트리밍 하위 디렉터리와 하위 디렉토리 파일을 제외한 해당 디렉터리의 파일 목록만 가져올 때 사용한다. //samplePath의 Path 타입이고 경로는 /j.. 자바 2023. 11. 4. java collection sort using Comparator java collection 프레임워크에서 Comparator 인터페이스를 이용하여 sorting 처리 방법에 대해서 기록한다. Comparator 인터페이스 Comparator 인터페이스는 int compare(T o1, T o2) 형태의 FunctionalInterface이다. Comparator 인터페이스 구현체를 collection 인스턴스의 sort() 메서드에 전달할 수 있다. sort() 메서드 내부적으로 Comparator 인스턴스의 compare() 메서드를 호출한다. sort() 메서드는 내부적으로 인자로 전달된 Comparator 인스턴스의 compare() 호출의 결과가 > 0인 경우 swap 한다. Comparator.comparing() Comparator 인스턴스는 몇 가지 .. 자바 2023. 10. 17. java generic class java generic은 java 프로그래밍에서 매우 중요한 개념 중 하나로 generic을 사용하여 타입 안정성을 높이고 재사용성을 개선할 수 있다. 이번 포스팅에서는 java generic의 개념과 활용 방법에 대해서 기록한다. Generic 코드 사용의 이점 java 컴파일시 더 강력한 유형 검사를 수행한다. java 컴파일러는 일반 코드에 엄격한 타입 검사를 적용하고 코드가 타입 안전성을 위반하는 경우 컴파일 오류를 발생시켜 런타임 이전에 문제를 찾을 수 있다. 타입을 명확히 지정하여 형변환을 제거할 수 있다. //uses unchecked or unsafe operations. 경고가 발생한다. List list = new ArrayList(); list.add("hello"); String s.. 자바 2023. 9. 24. java time convert (시간 변환) 애플리케이션 개발을 하다 보면 종종 문자열 타입의 시간 정보를 자바의 LocalDateTime 혹은 LocalDate, LocalTime과 같은 인스턴스로 변환을 하거나 역으로 원하는 시간 형식으로 문자열로 변환을 해야 하는 경우가 있다. 또한 지역 시간(timezone)에 맞도록 시간을 변경해야 하는 경우도 있을 것이다. 이번 포스팅에서는 자바에서 시간 변환과 관련된 내용을 기록한다. 기본으로 제공되는 시간 관련 클래스 java에서는 기본적으로 제공하는 몇 가지 시간 관련 클래스가 있다. 해당 클래스의 목록은 아래와 같다. 클래스 now() 호출 형식 기본 timezone LocalDateTime 2023-09-17T13:22:51.003196 시스템에 적용된 timezone의 날짜와 시간 표시 Loc.. 자바 2023. 9. 17. Java - 람다 표현식(lambda expression) - 4개의 주요 functional interface Java8부터 도입된 람다 표현식과 관련하여 새로운 패키지인 java.util.function 이 도입되었다. 해당 패키지 안에는 대부분 함수형 인터페이스가 정의되어 있으며 특히 컬렉션 프레임워크와 스트림 API와 함께 많이 쓰인다. 그 말은 컬렉션 프레임워크와 스트림 API와 함께 람다 표현식도 많이 쓰인다는 것과 동일하겠다. JDK8부터 기본적으로 제공되는 java.util.function 패키지의 기본 함수형 인터페이스의 Supplier, Consumer, Function, Predicate에 대해서 기록한다. Supplier Supplier 인터페이스는 파라미터가 없는 T 타입의 객체를 리턴하는 get() 추상 메소드를 가지는 함수형 인터페이스이다. @FunctionalInterface publi.. 자바 2023. 9. 15. Java - 람다 표현식 (lambda expression) 개요 Java SE 8 부터 람다 표현식 이라는 개념이 도입되었다. 람다 표현식은 Functional Interface 를 구현하는 구현체라고 보면 좋을 것 같다. 혹은 Functional Interface의 익명 클래스 인스턴스를 생성하는 간단한 방법이라고 봐도 좋을 것 같다.이번 포스팅에서는 람다 표현식에 대한 소개를 하고자 한다. 람다 표현식 작성 세 단계람다 표현식을 작성할 때는 아래의 세 단계에 따라 작성하면 도움이 될 것 같다.작성하려는 람다 표현식의 유형 식별하기 (Functional Interface)구현할 올바른 메소드 찾기메소드 구현하기람다 표현식을 작성할 때 고려할 위 3가지 단계에 따라서 차근 차근 알아보자. Functional Interface (함수형 인터페이스)람다 표현식의 유형에는.. 자바 2023. 9. 10. 이전 1 2 다음 💲 추천 글