본문 바로가기

개발

[Spring] java.lang.IllegalArgumentException: id to load is required for loading 오류 Spring에서 아래와 같은 오류 메세지를 만났다. org.springframework.dao.InvalidDataAccessApiUsageException: id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading loading 하기 위해서는 id가 필요한데 찾을 수 없다. 라는 오류 메세지이다. 차근차근 오류를 찾아갔다. 나의 경우에는 아래 상황에서 문제가 발생했다. Item book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10.. 더보기
[Java] UnaryOperator, BinaryOperator 함수형 인터페이스 1. UnaryOperator UnaryOperator는 Function의 자손이다. 그러나 Parameter Type과 Return Type이 같다. @Test @DisplayName("UnaryOperator를 활용한 replaceAll()") void UnaryOperatorTest() { UnaryOperator makeTwice = n -> n * 2; List originList = Arrays.asList(1, 2, 3); originList.replaceAll(makeTwice); List resultList = Arrays.asList(2, 4, 6); assertThat(originList).isEqualTo(resultList); } 2. BinaryOperator BinaryOper.. 더보기
[Java] Supplier, Consumer, Function 함수형 인터페이스 1. Supplier Supplier (T는 Parameter Type을, R은 Return Type을 의미한다) Supplier는 매개변수는 없고, 반환값만 존재하는 경우 사용된다. @Test @DisplayName("Supplier를 활용한 양수 확인") void supplier() { Predicate isPositive = n -> n > 0; Supplier getValue = () -> (int) (Math.random() * 100) + 1; assertThat(isPositive.test(getValue.get())).isTrue(); } 2. Consumer Consumer Consumer는 매개변수만 있고, 반환값이 없는 경우 사용된다. @Test @DisplayName("Consume.. 더보기
[Java] Predicate 함수형 인터페이스 java.util.function 패키지 내에는 일반적으로 사용되는 형식의 메서드가 함수형 인터페이스로 구현되어 있다. 가능하면 이 패키지의 인터페이스를 사용하는 것이 좋다. 그래야만 코드의 통일성이 높아져 유지보수성을 높일 수 있기 때문이다. 그 중 Predicate는 조건식을 표현하는데 사용된다. 매개변수는 하나이며, 반환 타입은 boolean 이다. 1. test() @Test @DisplayName("test()를 활용한 양수 확인") void test() { Predicate isPositive = n -> n > 0; assertThat(isPositive.test(3)).isTrue(); } 2. and() @Test @DisplayName("and()를 활용한 두 개의 조건 확인") vo.. 더보기
IntelliJ에서 JUnit, AssertJ 프로젝트 생성하기 IntelliJ 환경 : 2021.2.2 (Ultimate Edition) 운영체제 : macOS Monterey 12.4 1. Gradle로 Java 프로젝트 생성하기 Project SDK는 사용할 Java 버전을 선택합니다. Project Name을 설정합니다. 프로젝트 생성이 완료되면, 위와 같은 디렉토리 구조를 갖게 됩니다. 2. build.gradle의 dependencies에 testImplementation 추가하기 testImplementation 'org.assertj:assertj-core:3.11.1' 위의 코드를 dependencies에 추가합니다. 3. 프로젝트/src/test/java 에 테스트 파일 추가하기 4. 테스트 코드 작성하기 junit과 assertJ를 모두 사용할 수.. 더보기
[Java] HashMap 내부 코드에 존재하는 transient 키워드 HashMap의 내부 코드를 부면 데이터를 아래와 같이 저장하고 있다. transient Node[] table; transient 키워드는 serialize 하는 과정에서 데이터를 제외하고 싶은 경우 선언된다. 예를 들어, 로그인 데이터와 같은 보안적인 내용이나 불필요한 데이터일 경우 사용할 수 있다. (deserialize 해보면, 해당 transient field에는 null 값이 들어있다.) 그런데 HashMap에서는 왜 table에 transient 키워드를 적용시킬까? table을 알아야 빠르게 검색할 수 있는 게 아닐까? 이 질문에 대한 답을 stackoverflow에서 찾았다. HashMap은 serialize할 때 사용되는 wrtieObject(), readObject() 메서드를 자체적.. 더보기