[개발일지] 230524 제네릭 상속 (with 와일드카드)
·
성장이야기/TIL
오늘은 제네릭과 와일드카드를 활용해 클래스를 상속해 다형성 특징을 살리는 코드를 작성해 봤다. 오늘 새로 배운 내용 이는 우리가 흔히 알고 있는 와일드카드이다. 와일드카드는 특정 타입을 명시해주지 않고 모든 타입이 올 수 있다는 것을 의미한다. 예를 들어 Set 처럼 선언을 해주면 해당 Set에는 어떤 타입이든지 담을 수 있는 Set이 된다. 와일드카드만 사용해서 모든 타입이 올 수 있도록 명시하는 것보다
[개발일지] 230516 Java Map.Entry 사용하기
·
성장이야기/TIL
오늘 새로 배운 내용 Map.Entry Map.Entry를 이용하면 Map에 저장된 모든 key-value 쌍을 각각의 key-value를 갖고 있는 하나의 객체로 얻을 수 있다. 간단한 예시를 보면 이해하기 편하다. 기존 Map에 저장된 모든 key-value의 값을 얻으려면 보통 아래와 같이 map.keySet()으로 각각의 key에 대해 value값을 얻으려고 할 것이다. Map hashMap = new HashMap(); for (String key : hashMap.keySet()) { System.out.println("key : " + key); System.out.println("value : " + hashMap.get(key)); } 하지만 Map.entrySet을 사용하면 Map.En..
[개발일지] 230511 @JsonAutoDetect을 이용해 직렬화, 역직렬화
·
성장이야기/TIL
기존 getter 메서드와 생성자로 이루어진 dto 클래스를 record 클래스로 리팩터링 하는데 record클래스가 자동으로 생성해주는 getter 메서드를 인식하지 못해 직렬화가 안되는 문제 발생 → @JsonAutoDetect 어노테이션을 이용해서 필드에 선언된 값들을 직렬화, 역직렬화 하도록 설정해서 해결 오늘 새로 배운 내용 @JsonAutoDetect @JsonAutoDetect이란 Jackson 라이브러리에서 제공하는 어노테이션 중 하나로 Jackson이 객체를 JSON으로 직렬화하거나 JSON을 객체로 역직렬화할 때 어떤 필드를 인식할지 결정할 수 있다. 나의 경우 @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)로 설정해줘..
[개발일지] 230510 Playtika testcontainers
·
성장이야기/TIL
오늘 새로 배운 내용 기존 개발환경 properties에서 설정해 준 redis 설정을 변경하고 테스트를 돌렸더니 테스트가 실패하는 문제 발생 (bean 생성 실패) → 알고보니 테스트 환경의 properties도 개발환경에서 변경한것처럼 redis 설정값을 변경해줘야 했다. 그런데 test환경의 properties는 개발환경과 다르게 redis의 host와 port번호의 value값이 embedded 되어있었다. 어떤 값이 embedded 된 건지 몰라 사수분께 여쭤봤는데 pom.xml에 설정해 준 redis test-container가 설정되어 있다고 하셨고 이 값은 playtika에서 제공하는 testcontainers 오픈소스를 사용 중이라고 하셨다. 즉, 테스트 환경에서는 실제 사용하는 redi..
[개발일지] 230509 @Mock, @MockBean, @InjectMocks의 관계
·
성장이야기/TIL
오늘은 회사에서 테스트 코드 작성 중 기존 테스트 코드를 살펴보다 어떤 곳은 @InjectMocks를 사용했고 어떤 곳은 @MockBean을 사용하고 있길래 어떤 차이가 있는지 궁금해서 알아봤다. 오늘 새로 배운 내용 @Mock, @InjectMocks, @MockBean의 관계 @Mock은 Mock(가짜) 객체를 생성하고, @InjectMocks는 클래스의 인스턴스를 생성한 후 @Mock 어노테이션으로 생성된 Mock 객체를 이 인스턴스에 주입한다. @MockBean은 스프링 컨텍스트에 Mock 객체를 등록해 @SpringBootTest와 함께 사용할 때 @Autowired가 붙은 필드에 자동으로 의존성을 주입한다. @Mock: @Mock 어노테이션은 Mock(가짜) 객체를 생성한다. Mock 객체는..
[개발일지] 230504 IN절 안의 foreach문
·
성장이야기/TIL
오늘 새로 배운 내용 foreach문을 이용해 반복해서 쿼리를 날릴 때, 전체적인 쿼리를 날리는 것보다 IN절 안에서 foreach문을 이용해 반복하는 게 효율이 더 좋다. 아래쿼리처럼 foreach문을 작성하면 전달받은 list의 크기만큼 전체 쿼리가 발생하기 때문에 비효율적이다. SELECT * FROM users WHERE user_id = #{userId} 예를 들어 userId가 들은 list의 사이즈가 10이면 "SELECT * FROM users WHERE user_id = #{userId}" 전체 쿼리가 10번이 날아간다. 하지만 전체 쿼리를 10번 반복할 필요 없이 IN절 안에 foreach문을 작성해 주면 전체쿼리 발생수가 한 번으로 줄어들어 쿼리 발생 비용을 줄일 수 있어 더 효율적이..