Category Java

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

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

Spring에서 sId가 필드가 매핑되지 않았던 이유

사소해 보이는 필드명 하나가 어떻게 수 십분의 디버깅을 요구했는지, 그리고 그 과정에서 배운 것들 문제 상황 프로젝트에서 데이터 매핑 오류를 경험했다. 분명 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)은 스트림 파이프라인의 끝에 호출되어 실제 연산을 수행하고 결과는 만든다. 최종 연산이 실행된 후에 스트림은…

Java Junit5 @ParameterizedTest

테스트 코드나 TDD에 대해서 자세히 알고 싶어서 인프런 이규원님의 TDD 강의 중 Spring Boot TDD – 입문부터 실전까지 정확하게 를 공부하는 중 매개변수화 테스트 내용이 나왔다. 실무에서 많이 사용할 것 같아서 다시 볼 수 있게 글로 남겨보자 Email 형식을 검증하는…