Category Java

Java 동시성 컬렉션 (2) – Concurrent Collection

Java 동시성 컬렉션에서 Collections.synchronizedXxx()를 살펴보았다. 이번에는 그 한계를 극복한 java.util.concurrent 패키지와 고성능 동시성 컬렉션들을 알아보자 왜 별도의 동시성 컬렉션이 필요할까? Collections.synchronized의 문제 Concurrent 컬렉션의 해결책 동시성 컬렉션 개요 java.util.concurrent 패키지 핵심 특징 제공되는 컬렉션 종류 타입 일반 컬렉션 Concurrent 컬렉션…

Java 동시성 컬렉션 (1) – Collections.synchronized와 한계

Java 컬렉션의 근본적인 특징 java.util 패키지의 컬렉션 프레임워크는 기본적으로 Thread-safe하지 않다. 그렇다면 왜 처음부터 모든 컬렉션에 synchronized를 걸어두지 않았을까? 그 이유는 동기화는 성능 비용을 수반하기 때문이다 Vector의 교훈 Java는 과거 이런 실수를 했다 결과 교훈: 동기화의 필요성을 정확히 판단하고 필요한…

필드명 두 글자가 대문자면 Jackson이 JSON 키를 잘못 추론한다

분명 값을 보냈는데 400이 떴다. 처음엔 @NotBlank 문제인 줄 알고 어노테이션을 바꿔가며 한참을 헤맸다. 원인은 필드명이었다 문제 상황 프로젝트에서 데이터 매핑 오류를 경험했다. 분명 JSON으로 값을 보냈는데, Controller에서 @Valid 검증에 걸려 400 에러가 발생했다 studentName은 정상 매핑됐다. sId만 계속 null이었다…

Java 동시성 컬렉션이 필요한 이유

java.util 패키지의 컬렉션 프레임워크(ArrayList, HashMap, LinkedList 등)는 멀티스레드 환경에서 안전할까? 결론부터 말하자면, 대부분의 컬렉션은 Thread-Safe하지 않는다 Java 컬렉션 프레임워크는 Thread-Safe한가? Thread-Safe의 정의 thread-safe란 여러 스레드가 동시에 접근해도 문제없이 동작하는 것을 의미한다 위 코드를 보면 add() 메서드가 단순히 컬렉션에 데이터 하나를…

생산자 – 소비자 문제와 BlockingQueue

문제 정의 생산자 – 소비자 문제는 한정된 크기의 버퍼를 통해 데이터를 주고 받는 멀티스레드 환경에서 발생하는 동시성 문제이다 핵심 문제 해결 방안의 진화 단순 synchronized (문제 발생) sleep()으로 대기 (더 심각한 문제) wait/nofity 사용 (비효율 존재) Lock + Condition으로 개선…

Kotlin – Java와 함께 컬렉션 사용하기

코틀린을 배우기 위해서 인프런에서 강의를 구매하고 코틀린과 친해지고 기본기를 다지기 위해서 공부하는 중이다. 글 내용은 배열과 컬렉션 중 Kotlin, Java와 함께 Collection을 다루는 방법이고 최태현님의 자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의에 소금을 조금 친 내용이다 Kotlin과 Java는 상호…

Java Stream Collection

김영한님의 김영한의 실전 자바 – 고급 3편, 람다, 스트림, 함수형 프로그래밍 내용 중 일부로 실무에서 자주 사용될 법한 Collection의 종류들이다 기본 List 수집 수정 불가능 리스트 Set으로 수집 타입 지정 – TreeSet은 정렬 상태를 유지 기본 Map 수집 키 중복 예외 Map…

POJO (Plain Old Java Object)

단순함으로 돌아가다 POJO가 등장한 배경: EJB의 복잡성 POJO가 등장하기 이전의 기술들, 예를 들어 EJB, 애플릿, 서블릿, JSP 등 여러 기술들은 아래와 같은 특징이 있다 EJB를 사용하며 불편함을 느낀 개발자가 직접 만든 오픈소스 서블릿 예시 POJO의 특징 및 장점 스프링에서의 POJO…

Java 기본형 특화 Stream

김영한님의 김영한의 실전 자바 – 고급 3편, 람다, 스트림, 함수형 프로그래밍 내용 중 일부로 실무에서 자주 사용될 법한 기본형 특화 Stream의 종류들이다 기본형(primitive) 특화 스트림 기본형 특화 스트림 생성(Int, Long, Double Stream) 범위 생성 메서드 통계 관련 메서드(sum, average, max, min, count)…

Java Stream 최종 연산

김영한님의 김영한의 실전 자바 – 고급 3편, 람다, 스트림, 함수형 프로그래밍 내용 중 일부로 실무에서 자주 사용될 법한 Stream의 최종 연산 종류들이다. Stream에서의 최종 연산 최종 연산(Terminal Operation)은 스트림 파이프라인의 끝에 호출되어 실제 연산을 수행하고 결과는 만든다. 최종 연산이 실행된 후에 스트림은…