반응형

Programming/Java 70

Java Map 반복시키는 가장 효율적인 방법

Java Map Interface 반복시키는 가장 효율적인 방법 Map Interface Map 인터페이스는 Key와 Value를 하나의 쌍으로 저장하는 방식의 자료형이며, 리스트나 배열과 같이 순차적으로(sequential) 해당 요소 값을 구하는 것이 아니라 'key를 통해 value를 가져오는 방식'이 가장 큰 특징입니다. 구현체 중 가장 많이 사용되는 클래스는 HashMap이며, 순서가 필요한 경우 입력된 순서대로 데이터가 출력되는 LinkedHashMap, 입력된 key의 sort 순서로 데이터가 정렬되는 TreeMap 등이 있습니다. 아래는 java에서 map을 반복시키는 몇 가지 방법들에 대해 어떤 방법이 더 효율적인지 궁금하여 비교하며 정리해 본 내용입니다. Map 반복 방법 Map map..

Programming/Java 2023.07.26

java stream BigDecimal add 합계 구하는 방법

java stream을 통해 BigDecimal 합계 또는 연산하는 방법 부동소수점의 부정확성으로 인해 java에서는 소수점에 대한 정확한 계산이 요구되거나 화폐 단위를 사용할 때 BigDecimal 타입을 사용하는데요. 해당 포스팅은 'java에서 stream을 활용하여 BigDecimal을 연산하는 방법'에 대해 정리한 내용입니다. 코드 예시 List bigDecimalList = Arrays.asList( BigDecimal.valueOf(1.123), BigDecimal.valueOf(0.335), BigDecimal.valueOf(2.10101), BigDecimal.valueOf(0.54321) ); //stream을 사용하지 않는 경우 연산 BigDecimal sum = BigDecimal...

Programming/Java 2023.07.19

java image resize library 이미지 리사이즈 라이브러리 비교해보기

Compare java image resizing libraries 해당 포스팅에서는 썸네일 생성 등, 이미지의 사이즈를 조절하는 기능을 java에서 구현하기 위해 사용할 수 있는 몇 가지 라이브러리와 해당 라이브러리들의 사용 방법에 대해 살펴봅니다. + 마지막에는 각 라이브러리들을 사용한 image resizing 결과를 비교해 보는 내용도 포함되어 있습니다. java.awt.Graphics2D Image.getScaledInstance() thumbnailator Imgscalr 1. java.awt.Graphics2D 'Graphics2D Class'는 graphics contexts에 대한 추상화를 제공하는 기본 클래스인 Graphics Class를 확장한 것으로 java 플랫폼에서 2차원 텍스트..

Programming/Java 2023.07.15

Java 8, 11, 17 버전별 추가된 기능 (+ 무슨 버전을 써야할까?)

java 8, 11, 17 버전이 많이 사용되는 이유와 버전별 추가된 기능 최근 몇 년 동안 java에서 가장 많이 사용되는 버전은 'java 8'으로 저 역시 실무에서는 java 8만 계속 사용하고 있는데요. 자바는 2021년 9월 출시된 LTS 버전 java 17 이후로 2023년 7월 현재 java 20 버전까지 출시가 된 상태입니다. 이처럼 java에는 다양한 버전이 있는데요. 아래 jetbrains의 '2022년 개발자 생태계 설문조사'를 살펴보면 자바 개발자들이 사용하는 버전이 java 8, 11, 17에 집중되어 있는 것을 볼 수 있는데, 그 이유는 무엇일까요? 해당 포스팅은 자바 생태계에서 java 8, 11, 17이 많이 사용되는 이유와 각 버전별로 추가된 기능에 대해 정리한 내용입니다...

Programming/Java 2023.07.05

java ip 접속 국가 정보 확인하기(GeoIP2, GeoLite2)

GeoIP2, GeoLite2를 사용하여 java에서 ip 접속 국가 정보 확인하는 방법 글로벌 서비스를 운영하는 경우 접속 ip를 통해 국가 정보를 확인해야 하는 경우가 있을 수 있으며, 글로벌 서비스가 아니더라도 해외에서 들어오는 요청을 차단하기 위해 접속 ip에 대한 지역 정보가 필요한 경우가 있습니다. 해당 포스팅은 java에서 client ip를 통해 접속 국가 정보를 확인할 수 있는 api인 'GeoIP2(com.maxmind.geoip2)'와 무료 데이터베이스 'GeoLite2'를 사용하는 방법에 대한 내용입니다. * 무료 데이터베이스인 GeoLite2와 유로 데이터베이스 GeoIP2는 정확도 측면에서 차이가 있습니다. GeoLite2 다운로드 아래 예시에서는 GeoLite2를 다운로드하여 ..

Programming/Java 2023.06.29

Java List null check 방법 (isEmpty, size)

Java List null check 프로젝트를 진행하다 보면 List를 활용하는 부분에서 NullPointerException이 발생하는 경우를 생각보다 자주 접할 수 있는데요. 아래 내용은 java에서 list에 대한 null 체크를 하는 몇 가지 방법에 대해서 정리한 것입니다. List.isEmpty(), List.size() - isEmpty() //Returns true if this list contains no elements boolean isEmpty(); List interface의 isEmpty() 메서드는 해당 리스트 객체가 아무런 요소도 가지고 있지 않을 때(리스트가 비어있을 때) true를 반환합니다. //NullPointerException 발생 List list = null;..

Programming/Java 2023.06.09

java stream partitioningBy(), groupingBy() 분할과 그룹화

Java Stream 분할과 그룹화 (partitioningBy, groupingBy) 최근 reducing() 메서드를 살펴보던 중 API Note 부분에서 'reducing()은 groupingBy 또는 partitioningBy의 downstream에 사용할 때 유용하다.'는 주석을 보게 되었는데요. 평소 stream을 잘 사용하지 않는 편이라 partitioningBy, groupingBy 기능을 처음 접하게 되었고, 자세한 내용이 궁금하여 검색해 본 결과 알아두면 잘 활용할 수 있는 기능이라고 생각되어 정리한 내용입니다. (그리고 딱 마침 바로 실무에서 활용을 하게 되었는데 활용도도 높고, 상당히 편리한 기능인 것 같습니다.) partitioningBy(), groupingBy() 개념 분할 메..

Programming/Java 2023.05.24

ConcurrentHashMap 개념과 동기화 동작 원리(Thread-safe)

ConcurrentHashMap 개념과 동기화 동작 원리(Thread-safe) 해당 포스팅은 멀티스레드(Multi-Thread) 환경에서 동시성 이슈로 인해 ConcurrentHashMap을 사용해 보면서 정리한 것으로 'ConcurrentHashMap의 개념과 해당 클래스가 Thread-safe 하게 동작할 수 있는 동작 원리'에 대한 내용입니다. (구글링을 해보면 이미 ConcurrentHashMap에 대해 잘 정리된 글이 많지만, 직접 코드를 살펴보고 동작 원리를 파악하고 싶어 다른 글들을 참고하여 정리한 내용입니다.) synchronized 키워드 synchronized 키워드는 아래 ConcurrentHashMap을 이해하는 데 있어서 중요한 요소 중 하나라고 생각되는데요. 멀티스레드(Mult..

Programming/Java 2023.05.21

(java) 어플리케이션 단계에서 외부 이미지 파일 불러오는 방법

java, application 단계에서 외부 이미지 파일 불러오는 방법 어플리케이션에서 파일 업로드를 구현할 때, 업로드되는 파일의 경우 application 내부의 static 폴더에 저장되는 것이 아니라 application 외부에 있는 서버 단의 별도의 공간에 저장되거나, 외부 파일 서버에 저장되는 방식이 사용되는데요. 업로드 이후 해당 이미지 파일을 보기 위해서는 web server를 통한 방식이 주로 사용됩니다. 하지만 특수한 경우로 web server를 통해 정적 파일에 접근하는 것이 아니라, 어플리케이션 단계에서 해당 파일을 가져와야 하는 경우가 있는데요. 이때 어떤 방법으로 application 단계에서 이미지 파일을 가져올 수 있는지 살펴보겠습니다. 핵심이 되는 부분 @GetMappin..

Programming/Java 2023.03.01

JSch를 이용한 java sftp 파일 업로드 구현

com.jcraft.jsch 라이브러리를 이용한 java sftp 파일 업로드 SFTP(Secure File Transfer Protocol)는 SSH(Secure Shell) 기반의 보안 파일 전송 프로토콜인데요. 일반 파일 전송 프로토콜인 FTP(File Transfer Protocol)와는 다르게 파일 전송 시 모든 정보를 암호화하여 통신하며, 때문에 보안상의 문제를 방지하고 안전하게 파일을 전송하고 받을 수 있습니다. (연결이 안전하다는 장점이 있지만 때문에 SSH 키의 유효성 검사 및 관리가 추가적으로 필요합니다.) java에서는 sftp 파일 전송을 위해 JSch 라이브러리가 많이 사용되는데요. 해당 포스팅은 com.jcraft.jsch 라이브러리를 사용한 sftp 접속 및 파일 업로드 구현 ..

Programming/Java 2023.02.18
반응형