Java 5

for vs stream

이전에 공부했던 내용이지만 잘 설명해준 유튜브를 보고 내용을 정리해 봅니다. 기본 정보 for, foreach 구체적인 로직이 외부에 노출되는 외부 반복의 형태입니다. for문은 java 1, foreach문은 java 5부터 등장했습니다. foreach문은 컴파일 시 for문으로 변환됩니다. stream 구체적인 로직이 외부에 노출되지 않는 내부 반복의 형태입니다. 함수형 프로그래밍 패러다임이 도입된 java 8부터 등장했습니다. 차이 익숙함의 차이에서 오는 가독성의 호불호가 있습니다. 디버깅 난이도의 차이가 있습니다. for 에러 발생 위치가 바로 노출됩니다. stream 지연 연산을 통해 실행되기에 에러 발생 시 위치를 추적해야 합니다. 병렬 처리 구현의 차이가 있습니다. for 구체적인 로직을 나..

Study 2022.06.01

String 을 잘 써보자

String 은 Java에서 가장 오래되고 많이 다루는 자료형 중 하나입니다. 그만큼 다루는 방법도 여러 가지인데요. 실무를 하면서 헷갈리기 Best Practice를 기록해 봅니다. 단 String의 반복 연산은 일반적이지 않기에 다른 개선에 비해 드라마틱하지 않습니다. 그리고 실무에서는 팀 컨벤션으로서의 코드 일관성이 우선이기에 무조건적인 적용은 권장하지 않습니다. 각 항목별 제목으로 Best Practice가 기록되어 있습니다. 그래프의 수치는 높을수록 좋은 성능을 의미합니다. 1. String 은 Immutable 합니다. 워낙에 많은 블로그에 잘 소개되어 있기에 이어질 내용의 배경으로서 기록은 하지만 내용은 생략합니다. String과 Mutable, Immutable에 대해서 헷갈린다면 검색해보..

Study 2021.10.16

비동기 테스트 만들기

비지니스 로직을 하다 보면 외부 API 호출을 할 때가 많은데, 속도를 위해 비동기 처리를 하곤 합니다. API로 구현된 비동기 처리는 예제가 많았지만, 서비스로 구현된 비동기 처리는 예제를 찾기 힘들었습니다. 아래는 메인 로직 후 이메일을 보내는 비동기 후처리 로직을 분리하고 테스트한 예제입니다. 결론 Reactor 객체를 메서드의 반환 값으로 받습니다. 테스트할 때는 block() 을 걸어 동기 처리를 합니다. 비동기 이메일 전송 메소드 Before request 메서드에서 request 객체를 만들고 비동기 발송까지 모두 하고 있습니다. 지금은 후처리 로직이 로깅뿐이지만, 로직이 들어가는 경우 메서드가 복잡해집니다. 비지니스 로직의 메서드인 sendEmail에서는 발송 결과를 알지 못합니다. // ..

Study 2021.02.25

enum 을 조회하는 방법

회사의 enum 조회 코드를 보다가 불현듯 이펙티브 자바와 블로그에서 본 개선 방법이 생각나서 실험을 해봤습니다. Spring boot 2.x.x, Java 11 테스트 코드 Repository Link enum 조회 시 Stream, Array, Map의 성능 차이는 얼마나 될까? @Getter @AllArgsConstructor public enum CategoryColor { YELLOW(0, "#FEDE00"), BLUE(1, "#85C4E7"), ORANGE(2, "#F3AC13"), ... ; private final int order; private final String code; public static final Map categoryColorMap = new HashMap(); sta..

Stream 의 병렬 처리란?

Stream 은 Java 8에 추가된 Lambda를 활용할 수 있는 기술 중 하나로, 연속된 요소의 집합을 순차 처리합니다. Stream의 병렬 처리는 데이터 병렬성을 구현한 것으로, 내부적으로는 Fork-Join Framework를 이용하며 성능을 향상할 수도 있지만 몇 가지 주의 사항이 있습니다. No storage 별도의 저장 공간이 필요하지 않습니다. Immutable 원본을 수정하지 않고 결과를 생성합니다. Laziness 결과를 위한 최소한의 동작만을 수행합니다. Possibly 무한한 값을 가질 수 있습니다. Consumable 스트림의 요소는 생명 주기 동안 한번만 사용됩니다. 사용하면 좋은 경우 충분한 개수의 가용 코어와 충분히 큰 요소당 처리 시간 처리 시간이 Thread Pool 과 ..

Study 2020.08.21