전체 글131 DIP를 적용하여 리팩토링 해보기 프로젝트 진행하면서 DIP를 적용하여 리팩토링을 한 이야기를 해보려고 합니다. 이야기에 앞서, DIP의 정의는 아래와 같습니다. 의존 역전 원칙(Dependency Inversion Principle, DIP)DIP는 객체지향 설계 원칙인 SOLID 원칙 중 하나로, 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 모두 추상화에 의존해야 한다는 원칙입니다.DIP의 핵심은 구체적인 구현보다 추상화된 인터페이스나 추상 클래스에 의존하도록 설계해야 한다는 것인데요.DIP를 적용한다면 객체가 구체적인 구현에 의존하지 않고 인터페이스나 추상화에 의존하여 구현의 변경이나 교체를 간편할 수 있기에 전체적인 시스템의 유연성을 높이고, 변경에 더 잘 적응할 수 있어 코드의 의존성 관리를 개선하고, 변화에 유연하게 .. 2024. 6. 21. @RequiredArgsConstructor와 @AllArgsConstructor 비교하기 문제 상황프로젝트 진행 중에 Mapstruct 라이브러리를 사용하여 DTO를 자동 매핑하는 과정에서 문제를 겪었습니다.기존에는 무조건 DTO 필드를 @AllArgsConstructor로 설정했었는데, DTO의 특성상 불변 객체로 만드는 것이 더 적합하다고 판단해서 @RequiredArgsConstructor로 변경했었습니다.하지만 @RequiredArgsConstructor로 설정된 클래스의 필드가 누락되어 매핑되지 않는 오류가 발생했고 해결책을 찾기 위해 DTO 클래스를 디컴파일해 본 결과, 문제의 원인을 찾을 수 있었습니다. Lombok 어노테이션 비교Lombok의 @RequiredArgsConstructor와 @AllArgsConstructor는 각각 생성자를 자동으로 생성해주는 편리한 기능을 제공.. 2024. 6. 14. [Java] 자바21의 가상스레드 간단하게 이해하기 자바 21에 새롭게 가상스레드가 추가되었고 간단하게 가상스레드를 이해해 보기 위해 포스팅하게 되었다. 자바의 스레드가상 스레드를 이해하기 위해 먼저 기초지식인 프로세스와 스레드를 다시 정리하면 아래와 같다.프로세스 : 프로그램이 CPU 메모리 자원을 할당받아 실행 중인 상태스레드 : 프로세스 내 실행 흐름 단위. 즉, 프로세스에 소속되어 여러 코드를 동시에 실행시킬 수 있도록 하는 단위 그러면 자바코드로 스레드를 만들어서 실행시킨다면 실제로 어떻게 동작하게 되는 걸까? 자바에서 스레드를 만들어서 실행하는 코드public static void main(String[] args) throws Exception { for (int i = 0; i 코드레벨에서 스레드를 생성하게 되면 자바가 동작하고 있는 .. 2024. 5. 29. [Java] 제네릭과 가변인자 조합 메서드의 @SafeVarargs 어노테이션 @SafeVarargs 어노테이션을 이해하기 위해선 가변인자와 제네릭의 조합을 알아야한다. 가변인자를 사용하면, 메서드를 호출할 때 매개변수의 개수를 자유롭게 넣을 수 있고 해당 값들이 담겨 있는 배열이 생성된다.public static int sum(int... nums) { return Arrays.stream(nums).sum();}int... 로 받은 정수형 타입의 매개변수의 합을 반환하는 기본적인 예시그렇다면 만약 제네릭 함수에서 가변인자를 사용하면 어떻게 될까? 아래에 List를 여러개 받아 모두 하나의 List로 합쳐주는 flatten 메서드가 있다.public static List flatten(List... lists) { List result = ne.. 2024. 4. 24. JdbcTemplate batchUpdate로 벌크 insert하기 여러번의 단일 insert 질의를 통해 데이터를 저장하던 부분을 벌크 insert로 변경하여 한 번의 insert문으로 성능을 개선했던 이야기를 하고자 합니다. 원티드 채용공고를 스크래핑하는 배치 어플리케이션을 구축하고 있습니다.원티드에 채용공고에는 JD의 상세내용, JD에 포함된 기술스택 목록이 존재합니다.따라서 스크래핑한 채용공고 데이터를 1:N 관계로 이루어진 wanted_jd 테이블과 skill_history 테이블에 적재하고 있습니다.JD 상세 내용을 wanted_jd 테이블에 적재, 기술스택 목록은 skill_history 테이블에 적재@StepScope@Component@RequiredArgsConstructorpublic class WantedJdItemWriter implements It.. 2024. 3. 22. @ConfigurationProperties으로 프로퍼티값 바인딩하기 SpringBoot 3.2.1 버전으로 진행한 내용입니다. 아래와 같은 properties 파일로 외부 URL을 관리하고 있다. @Value@Value 어노테이션을 사용하면 프로퍼티 파일의 값을 변수에 바인딩 할 수 있다. 하지만 @Value 어노테이션을 사용하면 final 키워드를 붙이지 못한다.@Value 어노테이션은 스프링에서 프로퍼티 파일의 값을 스프링 빈으로 등록하는데 스프링 컨텍스트가 시작될 때, 즉 런타임 시점에 프로퍼티 파일에 정의된 값들이 해당 변수에 바인딩 되기 때문에 컴파일 시점에서 final 키워드를 사용할 수 없다.따라서, @Value 어노테이션을 통해 바인딩 된 변수는 불변하게 관리할 수 없다는 치명적인 단점이 있다. @PropertySource@PropertySource 어노테.. 2024. 2. 7. 이전 1 2 3 4 5 6 7 ··· 22 다음