Wildcard Capture and Raw type use
·
Java
다음과 같이 리스트의 원소를 거꾸로 만드는 함수를 정의한다고 가정해 보겠습니다.public static void main(String[] args) { List list = Arrays.asList(1, 2, 3, 4, 5); reverse(list); System.out.println(list);}reverse 메서드는 제네릭으로 정의할 수 있습니다.public static void reverse(List list) { List tmp = new ArrayList(list); for (int i = 0; i 그러나, 자바 설계자들의 말에 따르면 메서드 내부에서 타입 파라미터를 사용하지 않는 경우 와일드카드를 사용하는 것이 좋다고 합니다. 따라서 다음과 같이 변경할 수 있습니..
JUnit 만들어보기⛳️
·
Test
이번 글에서는 Java 진영에서 테스팅을 위해 사용되는 프레임워크인 JUnit을 만들어보겠습니다. 참고프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞습니다(JUnit)반면에 내가 작성한 코드가 직접 제어의 흐름을 담당하면 그것은 프레임워크가 아니라 라이브러리입니다.(스트림 라이브러리)https://curlunit.sourceforge.net/doc/cookstour/cookstour.htmJUnit A Cook's Tour를 참고해서 진행하겠습니다.먼저 기본 개념인 TestCase를 나타내는 개체를 만들어야 합니다. 개발자는 종종 테스트 사례를 염두에 두고 있지만 다양한 방식으로 이를 실현합니다.print statementsdebugger expressionstest sc..
@OneToMany 단방향에서 update 쿼리를 없애는 방법
·
JPA
JPA를 사용하다 보면 @OneToMany 단방향 연관관계를 걸게 되는 일이 있습니다. 문제@OneToMany 단방향 매핑에서는 엔티티가 관리하는 외래 키가 다른 테이블에 있어, 연관관계 관리를 위해 추가로 UPDATE SQL을 실행합니다. 간단한 예제를 통해서 살펴보겠습니다.  다음과 같이 테스트 코드를 작성해서 쿼리를 확인해보겠습니다.team 테이블에 대한 insert 쿼리와 외래 키를 업데이트하기 위한 update 쿼리가 각각 실행된 것을 확인할 수 있습니다.해결@JoinColumn(nullable = false, updatable = false) 옵션을 걸어주면 Many 쪽이 save될 때 FK 를 같이 넣어줘서 불필요한 update 쿼리가 발생하지 않습니다. 다시 테스트를 실행해 보면, inse..
@WebMvcTest를 사용하지 않는 컨트롤러 테스트 작성하기
·
Test
보통 Web Layer(컨트롤러 계층)을 테스트할 때 슬라이싱 테스트인 @WebMvcTest를 사용합니다. 이번 글에서는 @WebMvcTest를 사용했을 때 불편했던 점들과 개선한 방법에 대한 경험을 공유하고자 합니다.@WebMvcTest란?여러 스프링 테스트 애노테이션 중, Web(Spring MVC)에 집중할 수 있는 애노테이션입니다.선언할 경우 @Controller, @ControllerAdvice 등을 사용할 수 있습니다.단, @Service, @Component, @Repository 등은 사용할 수 없습니다. - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스컨트롤러 계층 만을 슬라이스 테스트할 수 있도록 도와주는 애노테이션입니다. WebMvcTest (Spring Boot 3.1.2 API)..
GDSC 모던 자바 인 액션 멘토링 회고
·
회고
8월 9일을 시작한 GDSC 모던 자바 인 액션 스터디가 오늘(10월 9일) 8주차 Optional 클래스와 날짜와 시간 클래스 학습으로 마무리됐다.처음 진행해 본 강의식 스터디를 리뷰해보려고 한다.왜 했는가?2021년 초로 기억한다. 스프링을 학습하기 위해 인프런에 올라온 스프링 입문 강의를 듣는데, 다음과 같은 코드를 보여주셨다.강사님께서는 이 강의가 자바 8 강의는 아니니까 ~ 라고 말씀하시면서 강의를 이어나가셨지만, 자바 8 문법에 익숙하지 않았던 수강생인 나는 매우 당황스러웠다. 그당시 들었던 의문점은 다음과 같다.화살표는 어떤 의미이지..?Member를 왜 Optional로 감싸서 반환하지..?stream()을 꼭 선언해줘야 filter를 쓸 수 있는걸까?사실상 자바 8에 대한 이해가 0%에 ..
Enum 비교 == 아니면 equals()?
·
Java
들어가며 GDSC 모던 자바 인 액션 스터디 발표자료를 준비하기 위해 책을 읽어보던 도중, 책에서 Enum 비교를 위해 공통적으로 equals 메서드를 사용하는 것을 알게 되었습니다. Enum은 == 비교가 가능하며 이에 따른 이점이 존재하므로, 강의를 진행함에 있어서 책에서 제공하는 소스 코드와 다르게 진행하게 된 이유를 말씀드리고자 합니다. 우리는 String의 문자열 내용을 비교할 때는 String의 equals 메서드를 사용합니다. JLS, 15.21.3 Reference Equality Operators == and != 를 보면 해당 내용에 대한 설명이 잘 나와있습니다. (마지막 문단) == 는 String 유형의 참조를 비교하는데 쓰일 수 있지만, 이러한 동등성 테스트는 두 피연산자가 동일한..