본문 바로가기

Dev8

DAO와 Repository DAO와 Repository 웹 자동차 경주 미션을 진행하며 많은 크루들이 DAO 클래스를 사용해서 DB에 접근을 했다. 이 때 대부분이 스프링의 @Repository 어노테이션을 사용했다. DAO가 Repository의 일종인가, 싶었는데 DAO와 Repository를 함께 사용하는 크루도 있어서 혼란스러웠다. Spring 공식 문서에 나와있는 @Repository 어노테이션의 설명에는 다음과 같이 나와있다. Teams implementing traditional Jakarta EE patterns such as “Data Access Object” may also apply this stereotype to DAO classes, though care should be taken to understa.. 2023. 4. 23.
[Effective Java] Item 46. 스트림에서는 Side Effect 없는 함수를 사용하라 아래는 우아한테크코스 5기 Level 1의 블랙잭 미션을 진행하며 작성한 코드이다. public static Participants from(List names) { List participants = new ArrayList(); participants.add(new Dealer()); names.forEach(name -> participants.add(new Player(name))); 위 코드에는 잘못된 점이 있다. 무엇이 잘못되었을까? 정답은, 이 글을 쭉 읽다보면 알 수 있다. 위의 코드에 대해 리뷰어가 커멘트를 남겨주었다. 이유가 궁금하여 관련 내용을 찾아봤고, Effective Java의 Item 46에서 해답을 찾았다. 스트림(Stream)은 왜 만들어졌을까? 스트림은 그저 또 하나의 A.. 2023. 3. 7.
ConcurrentHashMap이란? ConcurrentHashMap ConcurrentHashMap은 Java의 Map 인터페이스를 구현한 클래스 중 하나로, 멀티스레드 환경에서 안전하게 사용할 수 있는 스레드 안전(thread-safe)한 맵이다. ConcurrentHashMap은 JDK 1.5부터 제공되며, 동시성 처리를 위한 세그먼트(segment)라는 내부 데이터 구조를 사용하여 구현된다. ConcurrentHashMap의 특징 1. 동시성 환경에서 안전하게 동작한다. 2. 세그먼트라는 내부 데이터 구조를 사용한다. 3. 각 세그먼트는 서로 독립적인 해시 테이블을 가지고 있다. 4. 세그먼트를 동시에 접근할 수 있으며, 서로 영향을 주지 않는다. 5. 모든 연산은 세그먼트 레벨에서 수행되므로 세그먼트 락(segment lock)만 .. 2023. 3. 7.
다운스트림(Down Stream)이란? Java Stream API에서의 다운 스트림은 groupingBy나 partitioningBy 등의 상위 수준 수집기(collector)를 사용한 후에, 그 결과로 반환된 맵에서 더 작은 단위로 데이터를 수집하는 데 사용되는 수집기를 의미한다. 다운스트림 수집기는 map, list, set, count, sum, averaging, max, min, reducing 등 다양하며, 람다식을 사용하여 직접 사용자가 정의하여 사용할 수도 있다. 예를 들어서, groupingBy로 Map을 반환한 다음에 그 결과로 반환된 맵에서 다운스트림 수집기로 list를 사용하여 값을 수집할 수 있다. 2023. 3. 7.