본문 바로가기

개발 - Coding/Java & Spring6

[Java] Optional.of는 왜 있을까? Optional 그리고 Optional.ofOptional은 Java를 사용할 때 null-safe한 코드를 간결하게 짤 수 있게 해주는 좋은 클래스입니다.저는 가능하면 Java에서 null을 다룰 때 Optional을 많이 사용하는데요. 1. if문을 사용한 검사보다 코드가 더 간결하고2. 직접적으로 null을 사용하지 않아도 되며3. 람다를 활용하여 필요한 동작을 매끄럽게 연계할 수 있기 때문입니다. 그런데 Optional을 사용하다 보니 Optional.of가 왜 필요한지 의문이 들었습니다. Optional.of의 javadoc을 보면 다음과 같이 나와 있는데요.Returns an Optional describing the given non-null value.Throws:NullPointerExc.. 2024. 10. 10.
[JPA] @Transient와 @Transient? (Spring Data와 JPA의 관계에 대해서) 프로젝트 개발하면서 @Transient Annotation과 관련하여 고생한 경험을 바탕으로, 깨달은 점을 정리해보려고 합니다.@TransientSpecifies that the property or field is not persistent. It is used to annotate a property or field of an entity class, mapped superclass, or embeddable class.https://docs.oracle.com/javaee/7/api/javax/persistence/Transient.html Oracle에서 제공하는 Java Persisence의 @Transient 항목을 보면, 다음과 같이 설명하고 있습니다.영속적이지 않은 프로퍼티나 필드를 명시한.. 2024. 10. 3.
[JPA] @OneToOne 관계와 UNIQUE 제약조건 @OneToOne 관계에 대해서 JPA에서는 일대일 연관관계를 맺는 엔티티를 표현하기 위해서 @OneToOne 애노테이션을 지원합니다. 일대일 연관관계에 대해서 JPA는 문서에서 3가지 예시 케이스를 제공하고 있습니다. FK 컬럼을 매핑하는 일대일 연관관계 PK를 공유하는 일대일 연관관계 Embeddable 클래스를 통한 일대일 연관관계 각각의 케이스를 예제로 살펴보면 다음과 같습니다. FK 컬럼을 매핑하는 일대일 연관관계 // On Customer class: @OneToOne(optional=false) @JoinColumn( name="CUSTREC_ID", unique=true, nullable=false, updatable=false) public CustomerRecord getCustomer.. 2024. 4. 8.
[JPA] 컴파일시에는 발견할 수 없는 @Enumerated와 @Embeddable 오류 문제 상황 JPA 환경에서 Enum 타입에 실수로 @Embeddable 또는 @Embedded Annotation을 적용했을 때 생기는 오류에 대해서 알아보겠습니다. 이 문제는 @Enumerated가 적용된 Enum에 @Embeddable이나 @Embedded를 사용하기 때문에 발생합니다. Java의 Enum과 JPA에서의 Enum Java에는 Enum 타입이 있고 이를 이용해서 더 명시적이고 의미론적인 코드를 짤 수 있습니다. 예를 들어 다음과 같이 활용할 수 있습니다. Enum을 적용하여 코드를 개선하는 예제 먼저 단순하게 String을 이용하여 멤버십 레벨을 다루는 코드입니다. package com.example.EnumTest; import lombok.*; import javax.persiste.. 2023. 6. 1.
[JPA] Spring Boot JPA Query Creation JPA Query Creation JPA를 이용해서 코딩할 경우, interface에서 적절히 메서드 이름을 지정하는 것 만으로 query method를 만들 수 있다. 예시는 다음과 같다. // Question Entity import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; import java.util.List; @Getter @Setter @Entity public class Question { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(length = 200).. 2022. 7. 6.
[Spring Boot] 스프링 @Configuration 모듈화하기 스프링에서 @Configuration 모듈화하는 상황 스프링 프로젝트에서 비즈니스 로직을 구현할 때, 다형성을 적극 활용하면 좋은 경우가 있다. 예를 들어서 할인 정책을 적용할 때, 상황에 따라서 정해진 금액을 할인하는 정책과 정해진 비율을 할인하는 정책을 선택해야 하는 경우가 있다. 또는 멤버십 유형을 선택하여 유형마다 제공받을 수 있는 서비스들이 달라지는 경우에도 멤버십 객체의 역할과 구현을 분리할 수 있다. 이런 경우에는 별도의 설정 정보를 만들어서 @Configuration을 따로 관리하는 것이 좋다. 그렇다면 이 경우에 @Configuration을 여러 개 만들게 되면 이것들을 어떻게 관리하는 것이 좋을까? 반대로 하나의 @Configuration에 모든 설정 정보가 들어있는 상황에서 이것들을 .. 2022. 6. 29.