[개발일지] 230529 인스턴스화를 막기 위해 private 생성자를 사용하자
·
성장이야기/TIL
오늘 새로 배운 내용 이펙티브 자바 아이템 4를 읽던 중 처음 알게 된 사실이 있다. 자바 클래스에 생성자를 명시해주지 않을경우에 컴파일러가 자동으로 매개변수를 받지 않는 public 기본 생성자를 만들어 준다는 사실을 전혀 모르고 있었다. public 한 기본 생성자가 있을 경우 의도치 않게 클래스가 인스턴스화될 가능성이 존재한다. 문제가 되는건 인스턴스로 만들어 쓰려고 설계한 클래스가 아닌데 인스턴스화가 되면 안 되기 때문에 인스턴스화를 막아야 한다. 인스턴스화할 필요가 없는 클래스들이 존재하는데 (예를 들어 java.lang.Math나 java.util.Array처럼 기본 타입값이나 배열 관련 메서드만 모아놓은 클래스들) 이러한 클래스들은 private 생성자를 추가해 인스턴스화를 막고 있다. 컴파..
[개발일지] 230526 정적 멤버 클래스를 이용해 불필요한 중복을 제거하자
·
성장이야기/TIL
오늘 새로 배운 내용 테스트 코드에서 반복해서 생성되는 객체는 정적 멤버 클래스를 이용해서 중복을 줄이자. 테스트 코드에서 각각의 독립적인 테스트 케이스마다 객체 검증을 위해 반복적으로 객체를 생성해야 할 일이 있을 것이다. 예를 들어 아래와 같이 Post라는 객체를 검증하기 위해서는 각각의 테스트 케이스마다 post를 생성해줘야 한다. @Test void test1() { Post post = new Post(...); ... } @Test void test2() { Post post = new Post(..); ... } 테스트 케이스가 많아질 수록 Post 객체를 생성하는 작업은 귀찮고 코드도 중복되는 문제가 발생한다. 이런 문제를 해결하기 위해서 중첩 클래스의 한 종류인 정적 멤버 클래스를 이용할..
[개발일지] 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 객체는..