개발 179

Java의 @NonNull vs @Nonnull vs @NotNull 정리

Java의 @NonNull vs @Nonnull vs @NotNull 정리Java에서 null을 방지하는 애너테이션을 사용할 때 @NonNull, @Nonnull, @NotNull 등 다양한 애너테이션이 있어서 헷갈릴 수 있습니다.이 글에서는 Lombok의 @NonNull, Jakarta(또는 javax)의 @Nonnull, Java Bean Validation의 @NotNull 차이점을 정리하고, 최신 환경에서 올바르게 사용하는 방법을 설명하겠습니다. 😊1. @NonNull (Lombok)📌 소속 패키지: lombok.NonNull📌 특징: Lombok이 제공하는 애너테이션으로, 자동으로 null 체크 코드가 삽입됩니다.✅ 주요 기능생성자나 메서드 매개변수에 null이 들어오지 않도록 강제합니다...

개발/Java 2025.03.20

Atomic Reference란?

1. AtomicReference란?안녕하세요! 오늘은 멀티스레드 환경에서 안전하게 객체 참조(Reference)를 관리하는 방법 중 하나인 AtomicReference에 대해 알아보려고 합니다.Java에서 멀티스레드 프로그래밍을 하다 보면, 여러 스레드가 동시에 객체의 상태를 변경할 수 있기 때문에 동기화 문제가 발생할 수 있습니다. 일반적으로 synchronized 키워드를 사용하거나, volatile을 활용하는 방법이 있지만, AtomicReference를 사용하면 락을 사용하지 않고도 객체의 참조를 안전하게 변경할 수 있습니다.그럼 AtomicReference가 무엇인지, 어떻게 활용할 수 있는지 함께 살펴볼까요? 🚀 📌 왜 필요할까?일반적으로 volatile 키워드를 사용하면 읽기와 쓰기는 ..

개발/Java 2025.03.18

ReflectionTestUtils를 이용한 private 필드와 메서드 단위테스트

ReflectionTestUtils를 이용한 private 필드와 메서드 단위테스트개요ReflectionTestUtils는 SpringFramework의 Test Context 에서 제공하는 유틸로, 프라이빗 필드나 메서드를 테스트할 수 있다.비공개 필드 값 설정비공개 필드 값 접근비공개 메서드 호출테스트를 작성하다보면 종종 단위테스트에서 위와 같은 접근이 필요할 때가 생기는데, 이 때 해당 클래스의 Private 메서드를 열지 않고 ReflectionTestUtils를 사용하면 접근할 수 있다.예시 코드예시 코드를 위해 직원 클래스를 만들어보자. 이 직원을 고용할 때 계약서에 이름과 계약 연봉을 작성한다.이름은 변경 불가능하니 private final을 붙이고, 연봉(annualSalary)는 매년 변..

개발/Spring 2024.12.02

Java 14 Record Keyword

1. record 키워드란?객체 간에 변경 불가능한 데이터를 전달할 경우 사용데이터베이스의 결과, 쿼리 결과, 서비스 정보 등 간단한 데이터를 보관하기 위해 클래스를 작성한다. 이 경우 많은 경우 변경 불가능한 데이터이다.record keyword에서 포함하는 것private 필드getterpublic 생성자equals 메서드hashCode 메서드toString 메서드2. 예시import java.util.Objects;public class Shop { private final String name; private final String address; public Shop(String name, String address) { this.name = name; ..

개발/Java 2024.11.22

[Lombok][Warning] @Builder will ignore the initializing expression entirely.

warning: @Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder. Default. If it is not supposed to be settable during building, make the field final. 빌드 시에 위 warning이 뜨는 케이스에 대해 알아보자. @Builder @Data @NoArgsConstructor public class Worker { private Long workerId; private WorkerType type = WorkerType.BASIC; } 만약 위와 같은 코드..

개발/Java 2023.01.15

[Lombok][Warning] 상속받은 클래스에 @Data만 사용하면 Warning이 뜨는 이유

프로젝트를 빌드할 때 종종 보이는 warning이 거슬려서 정리하는겸 블로그에 정리해본다. warning: Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. @Data 위 에러가 빌드할 때 종종 에러로 올라오는 것을 보았는데, IntelliJ를 통해 수정하면 @EqualsAndHashCode(callSuper=true) 어노테이션을 붙여주며 해결하지만, 왜 필요한지 한번 알아보자..

개발/Java 2023.01.14

[Java] AssertJ 사용법

Introduction to AssertJ | Baeldung AssertJ is an open-source library for writing fluent and rich assertions in Java tests. This article focuses on tools available in the basic AssertJ-core module. www.baeldung.com 해당 게시글은 위 글을 번역 및 테스트한 글이다. 1. AssertJ란? Java Test를 다양하게 사용할 수 있는 오픈 소스 커뮤니티 중심 라이브러리 2. 소개 AssertJ의 클래스 및 유틸리티 메소드 Standard Java Java 8 Guava Joda Time Neo4J and Swing components 예시 코..

개발/Java 2022.10.23

[Spring] Spring Boot 버전별 차이점

Spring Boot 버전 별 차이점 (2.2 ~ 3.0) + Spring Cloud 1. 개요 최근 사내에서 Spring Boot 버전을 올리면 어떨까 해서 Spring Boot 버전 및 Spring Cloud 버전 차이점에 대해서 간단하게 알아보고 있다. 프로젝트마다 Spring Boot 사용하는 버전은 각각 다른데, 그러다 보니 가끔 코드를 이쪽저쪽 주워 가다 보면 다른 점들이 있어서 변경해서 사용하곤 했다. 구체적으로 어떤 차이점이 있는지 한번 알아보고 상위 버전으로 마이그레이션을 한다면 어떤 것들을 주의해야 하는지도 알아보자. 일단 사내에서 사용중인 제일 낮은 Spring Boot 버전은 2.1.X 버전 대라 해당 버전 이후 버전들을 확인했다. 2. Spring Boot와 Spring Frame..

개발/Spring 2022.10.22

[Spring] Spring Boot v2.7

Spring Boot v2.7 Spring Boot 2.7 Release Notes · spring-projects/spring-boot Wiki 1. spring.mongodb.embedded.features 구성 속성이 제거됨 Embedded Mongo 3.4는 Mongo 기능 구성에 대한 지원을 중단함. 이에spring.mongodb.embedded.features 구성 속성이 제거되었음. Mongo를 시작하는 데 사용되는 명령줄을 변경하기 위해 기능이 지정되는 고급 구성의 경우 사용자 지정 MongodConfig 빈을 대신 제공해야 함. 2. MongoDB 속성 우선 순위 이전에는 spring.data.mongodb.uri가 spring.data.mongodb.host 및 spring.data.m..

개발/Spring 2022.10.18

[Spring] Spring Boot v2.6

Spring Boot 2.6 Release Notes · spring-projects/spring-boot Wiki 1. Spring Boot 2.4로부터 Deprecation 된 사항 Spring Boot 2.4에서 더 이상 사용되지 않는 클래스, 메서드 및 속성이 이번 릴리스에서 제거됨. 업그레이드하기 전에 더 이상 사용되지 않는 메서드를 호출하지 않는지 확인 2. 기본적으로 금지된 순환참조 이제 기본적으로 빈 간의 순환 참조가 금지됨. BeanCurrentlyInCreationException으로 인해 애플리케이션이 시작되지 않으면 종속성 주기를 중단하도록 구성을 업데이트하는 것이 좋다. 만약 순환 참조 해결이 어렵다면 spring.main.allow-circular-references를 true로..

개발/Spring 2022.10.17