본문 바로가기

Java22

돈(Money) 타입 1. 돈(Money) 타입으로 BigDecimal 사용 주문서 프로젝트에서는 돈(Money) 과 관련된 필드를 BigDecimal 타입으로 통일시켰다. 실제론 정수값이라 해도 돈은 중요하니까 별도의 타입으로 표현하고자 하는 의도가 담겨 있다. 또한 예전에 라인 서비스와 연동할 때 환전과 관련된 스펙이 있었는데 기존에는 Long 타입으로 돈을 다루고 있다 보니 소수점 화폐를 처리하기 위한 수정 범위가 너무 커 진행하지 못한 히스토리도 있었다. 그래서 이후에라도 비슷한 요구가 왔을때를 대비해 BigDecimal 타입으로 하는게 좋겠다는 의견도 반영된거다. BigDecimal 타입으로 금액을 비교하고 계산하기 위해서는 유틸리티 클래스를 만들어 사용하는게 좋다. 아래 코드는 0.0 과 0 을 비교하는 로직이다... 2023. 4. 29.
java stream 으로 Map 다루는 방법 이전글 에서 java stream 으로 Grouping 하는 방법을 설명하면 중간에 map 을 이용하는 방법을 공유했다. 이 글에서는 다른 예제로 설명을 해보려고 한다. 먼저 product 와 item 구조는 아래와 같다. product 안에 item 들을 리스트로 가질 수 있다. @Value @Builder public class Product { long productId; List items; @Value @Builder public static class Item { long itemId; } } 외부 api 를 호출해서 여러개의 product 들을 가져온다고 해보자. 이때 item 을 다루기 위해선 이중 for 문이 필요하다. product 도 여러개인데 각 product 마다 item 들도 여.. 2023. 4. 6.
Enum 타입 에 따른 테스트(DynamicTest) 커머스 관련 개발을 하다보니 수많은 Enum 들을 만나게 된다. 아래 Enum 은 간단한 상품타입 코드다. 단순 옵션과 복잡한 옵션 두개의 타입이 있다. public enum ProductType { SIMPLE_OPTION, COMPLEX_OPTION } 상품타입에 따라 달라지는 부분을 테스트 하기 위해선 ParameterizedTest 와 EnumSource 를 사용하면 된다. @ParameterizedTest @EnumSource(names = {"SIMPLE_OPTION", "COMPLEX_OPTION"}) void enumSourceTest(ProductType productType) { System.out.println(productType); } 하지만 Enum 들 관계에 따라 비지니스 로직.. 2023. 2. 18.
자바로 같은 상품 Grouping 아래 장바구니 페이지를 보면 손목 보호대는 같은 상품 2개가 묶여서 담겨있다. 하지만 팔꿈치 보호대는 같은 상품임에도 1개씩 개별적으로 담겨있다. 그래서 같은 상품끼리 Grouping 해주는 작업이 추가적으로 필요하다. 먼저 Product 와 Item 의 관계를 이해해야한다. 위에서 Product 는 '슈퍼비스트 손목보호대' '슈퍼비스트 팔꿈치, 무릎 관절보호대' 이고 Item 이 블랙, 팔꿈치(무릎은 선택안함) 이다. 쉽게 생각하면 Item 은 옵션정보다. 그래서 Product 는 여러개의 Item 들을 가질 수 있다. import java.util.List; import lombok.Builder; import lombok.Value; @Value @Builder public class Product.. 2023. 2. 5.
index 가 필요해도 자바 고전 for 문 안쓰는 방법 먼저 Product 는 item 리스트를 갖고 있다(Product 는 여러개일 수 있다). @Value @Builder public class Product { List items; } item 은 id 필드만 존재한다. @Value @Builder public class Item { String id; } 이제 각 Product 안의 모든 Item id 를 검사하는 로직을 만들어보자. 그런데 2가지 조건이 있다. 1. 모든 Item 들을 다 검사하고, 실패하는 것들은 예외 리스트로 담아서 전달. 2. 예외 객체에 담을 때 item index 정보가 필요. index 정보가 필요하니 가장 먼저 생각나는것은 고전 for문 방식이다. 이중 for문 으로 각 Product 안의 모든 Item 을 검사하고 예외.. 2023. 1. 14.
자바 Function.andThen 과 apply 작동 순서 아래 코드에서 httpClient 를 생성하는 로직을 보다가 andThen 과 apply 실행 순서가 헷갈려서 정리했다. public class ReactorClientHttpConnector implements ClientHttpConnector { private final static Function defaultInitializer = client -> client.compress(true); public ReactorClientHttpConnector(ReactorResourceFactory factory, Function mapper) { ConnectionProvider provider = factory.getConnectionProvider(); this.httpClient = default.. 2022. 8. 30.