[개발] 기록(48)
-
Java Optional class
Java 에서 가장 골치덩어리였던게 null point exception. 대부분의 에러는 NullPointException에서 나는 경우가 많다. 그래서 개발자들은 null을 처리해주기 위해서 if (myObject == null) 과같이 조건문을 만들고 분기를 태워줘야 했었다. 이렇게 처리된 코드는 보기도 흉했고 가독성도 떨어졌고, null 처리 로직이 들어가는 것 자체가 코드를 길게 하는 요인이였다. 이러한 문제 때문에 클린 코드에서는 가능하면 메소드가 null 을 리턴하지 말도록 권장했다. 클린 코드는 차라리 null 값보다 Empty 객체를 리턴하라고 말한다. https://kok202.tistory.com/25?category=785883 [2019.02.09] 클린코드 (오류, 경계) 오류 ..
2019.04.25 -
Reactive connection with DB
Repository 가 Non reactive 일 경우 1. find @Autowired private MyRepository myRepository; public void test(){ MyEntity myEntity = myRepository.findById("test-key"); System.out.println(myEntity.getKey()); } 2. save and find @Autowired private MyRepository myRepository; public void test(){ myRepository.save(new MyEntity("test-key", "message")); MyEntity myEntity = myRepository.findById("test-key"); Sys..
2019.04.18 -
Lombok을 사용할 때 List 타입 멤버변수 오버라이딩
문제 상황 @Data public class ParentElement{ public String message; } @Data public class ChildElement extends ParentElement{ public String message; } @Data public class Parent{ public List elements; } @Data public class Child extends Parent{ public List elements; } Child 의 elements가 Parent의 elements를 오버라이딩 한 코드를 만들고 싶다. 문제 해석 1. lombok 은 Child의 elements에 대응하는 public List getElements() { return elemen..
2019.04.16 -
Jackson Error - InvalidDefinitionException: Direct self-reference leading to cycle
Direct self-reference : 자기 자신을 참조하는 멤버변수가 존재할 때 발생하는 에러 문제 상황 @Data public class Parent { public String message; } @Data public class Child extends Parent{ public String message; public Parent getParent() { return (Parent) this; } } Child childInstance = new Child(); ObjectMapper objectMapper = new ObjectMapper(); System.out.println(objectMapper.writeValueAsString(childInstance)); 문제 해석 ObjectMa..
2019.04.16 -
[2019.04.06] SpringBootTest, SpringJpaTest
@SpringBootTest와 @DataJpaTest의 차이점 @SpringBootTest : 모든 Bean을 읽어들여서 테스트한다. @DataJpaTest : @Entity, @Repositort 만 읽어들여서 테스트한다. @Configuration, @Component, @Service 등 을 스캔을 하지 않는다. 데이터베이스를 인메모리 데이터 베이스를 이용하여 테스트를 수행한다. 덕분에 DataJpaTest의 로딩 속도가 더 빠르다. +) @Transactional 이 포함되어 있으므로 굳이 달아줄 필요가 없다. +) @SpringBootApplication 클래스안에 @Autowired 하는 객체가 있으면 DataJpaTest로 돌렸을 때 제대로 주입이 안되는 경우가 있다. 이럴땐 @Autowir..
2019.04.06 -
[2019.04.06] Mock, MockBean
테스트 코드에서 Mock @Mock, @MockBean : 컨테이너에 Bean이 없으면 새로운 가짜 Bean을 만들어서 @Autowired 처럼 주입해준다. @Mock : Mockito 에서 만들었다. @RunWith(MockitoJUnitRunner.class) @MockBean : Spring 에서 만들었다. @RunWith(SpringRunner.class) Mockito.mock(MyService.class) : MyService 오브젝트에 @Mock 을 달아서 쓰는 것과 동일 출처 : https://www.baeldung.com/java-spring-mockito-mock-mockbean Mockito.mock() vs @Mock vs @MockBean | Baeldung Learn the di..
2019.04.06