전체 글28 가짜중복과 진짜중복 [가짜중복과 진짜중복]개발자들은 공부하면서 코드의 중복은 최대한 줄여야한다고 정말 많이 듣습니다. 코드의 중복을 줄이는 것이 객체 지향 프로그래밍을 목표 중 하나입니다.이런 세뇌(?)를 받아서인지 저는 중복 코드를 보기 싫어 최대한 줄이고 싶어했습니다.하지만 문득 종종 “코드가 중복된다면 무조건 하나로 통일해야할까?!”라는 생각이 들었습니다.이런 애매모호한 의심을 가지고 개발하던 중 최근에 가짜 중복이라는 단어를 보고 이 글을 작성하게 되었습니다. 가짜 중복에 대해 글을 써보면서 정확한 이해를 해보고자 합니다.가짜 중복에 대해 제가 고민했던 경우를 바탕으로 아래 예시를 들어보겠습니다.(변수명 혹은 클래스명이 불편해도 참아주시길 바랍니다) 다음은 계약이라는 Contract 클래스가 있고, 그 안에는 계약이.. 2024. 11. 14. Arrays.asList()와 List.of()의 차이 Arrays.asList()Arrays.asList()로 반환된 List는 값의 수정이 가능하다.List list = Arrays.asList(1, 2, null);list.set(1, 10); // OK참고 *Arrays.asList()가 반환하는 ArrayList 타입은 java.util.ArrayList가 가 아니라 Arrays 내부 클래스입니다. add()와 remove() 메서드는 구현되어 있지 않아서, 배열의 크기 변동과 관련된 행동은 할 수 없습니다.Null을 허용한다.List list = Arrays.asList(1, 2, null); // OKlist.contains(null); // Returns false객체를 참조한다.Integer[] original = {1,2};List newP.. 2024. 9. 30. stream.toList() 와 .collect(Collectors.toList()) 차이 나는 보통 스트림을 사용할 때, toList()와 collect(Collectors.toList())를 주로 사용한다. toList()는 Java 16때 추가된 것이고, collect(Collectors.toList())는 Java 8때 등장한 것이다.나는 더 간결하다는 이유로 toList()를 보통 사용하였다. 하지만, 어떤 차이점이 있는 지 알아보기 위해 글을 작성한다..collect(Collectors.toList())반환되는 List의 수정이 가능하다.Null값을 허용한다. @DisplayName("Collectors.toList() modify 가능 테스트") @Test public void collectorsToList() { List modifiable = Stream.. 2024. 9. 30. HTTP 1.1과 HTTP 2.0 목차HTTP 1.0의 문제점HTTP 1.1HTTP 1.0 문제점 해결 방식문제점HTTP 2.01. HTTP 1.0의 문제점하나의 연결당 하나의 요청만을 처리하였다.→ 이것의 문제점은 하나의 요청을 하고 응답을 받을 때 연결이 끊어지고, 다시 요청을 하려면 서버와 다시 연결해야 한다는 것이다. → 요청마다 연결을 해야하는 것이고, 연결을 하기 위해선 TCP 3-handshake를 수행해야 했기 때문에 RTT(Round Trip Time)가 증가하고 그로 인한 네트워크 지연이 생긴다.2. HTTP 1.1HTTP 1.0 문제점 해결 방식Persistent Connection한번 3 way handshake를 통해 연결된 TCP 연결을 재활용하는 원리이다.연결을 끊지 않고 재활용하여 요청시마다 발생하는 비용을 .. 2024. 9. 19. Docker in Docker 문제 상황테스트 환경에서 h2 in-memory db를 사용하다가 mysql로 변경하기 위해 TestContainer를 도입하였다.TestContainer 설정 이후 CI가 될 때, TestContainer를 이용한 테스트들이 모두 에러가 났다. → CI 환경에서 테스트 시 발생하는 에러이다.에러 발생 이유Docker In Docker말 그대로 Docker Engine으로 실행한 컨테이너 안에서 또 다시 Docker에서 TestContainer를 실행시키기 위해 명령어를 사용했기에 발생한 에러이다.에러가 발생한 CI 스크립트는 다음과 같다.name: Develop Server Integrator (CI)on: push: branches: - developjobs: build_and_push:.. 2024. 9. 4. JPA로 인한 테스트 실패 안녕하세요, 개발자 여러분. 오늘은 JPA를 사용하면서 겪은 재미있는 문제 상황과 그 해결 과정을 공유하고자 합니다. 문제 상황최근 프로젝트에서 JPA를 사용하여 엔티티의 soft delete 기능을 구현했습니다. @SQLDelete 어노테이션을 사용하여 삭제 쿼리를 커스터마이징하고, @SQLRestriction을 통해 삭제된 엔티티를 조회에서 제외하도록 설정했습니다. 그리고 다음과 같은 테스트 코드를 작성했습니다: 예상치 못한 결과테스트를 실행했을 때, 예상과 다른 결과가 나왔습니다. isDeleted() 메서드가 false를 반환한 것입니다. 원인 분석 이 문제의 원인을 분석해보니, 다음과 같은 점들을 놓쳤다는 것을 깨달았습니다:영속성 컨텍스트와 데이터베이스의 불일치: @SQLDelete는 데이.. 2024. 8. 13. 이전 1 2 3 4 5 다음