protected 기본 생성자
·
DEVELOP/CONCEPT
왜 기본 생성자에 protected를 쓰는가?JPA 엔티티에서 기본 생성자에 protected 접근 제어자를 쓰는 건 아주 흔하고 권장되는 패턴이다. 그렇담 왜 public이 아닌 protected를 써야할까? 1. JPA는 기본 생성자를 필요로 한다.JPA는 내부적으로 리플렉션을 사용해 객체를 생성하기 때문에, 기본 생성자가 없으면 엔티티를 생성할 수 없다. 그래서 무조건 기본 생성자가 필요하다. 2. 하지만 public은 너무 개방적이다.기본생성자를 public으로 열어두면, 외부 코드에서 실수로 new Entity() 객체를 생성할 수 있다. 즉 불완전한 상태의 객체가 생길 수 있는 것이다. 이는 특히 도메인 무결성이 깨질 가능성으로 이어진다. public vs private vs protected..
[SPRING/JPA] Fetch 전략
·
DEVELOP/SPRING
Fetch 전략에 대해 알아보기 전에 먼저 Entity를 살펴보자.스프링부트에서 Entity를 구성할 때 아래와 같이 연관관계가 있는 객체들은 List와 같이 @OneToMany, @ManyToOne 같은 어노테이션으로 선언을 한다.package org.sopt.domain;import jakarta.persistence.*;import java.util.ArrayList;import java.util.List;@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; @OneT..
생성자 주입/필드 주입/setter 주입
·
DEVELOP/SPRING
Spring에서 의존성 주입(DI, Dependency Injection)을 하는 방식은 생성자 주입, 필드 주입, setter 주입 이렇게 3가지가 있다. 생성자 주입 (Constructor Injection) @Component public class MemberService { private final MemberRepository memberRepository; @Autowired public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } }특징불변성 보장: final 사용 가능 -> 생성 이후 값 변경 불가테스..
IoC와 DI
·
DEVELOP/SPRING
IoC(Inversion of Control) : 제어의 역전원래 개발자가 직접 하던 '객체 생성'이나 '객체 사이의 의존 관계 설정' 같은 제어권을 스프링 프레임워크가 대신 맡는 것을 뜻함예를 들어, 원래 개발자가 new 키워드로 객체를 직접 만들었겠지만, 스프링이 알아서 객체를 생성해서 관리해주고, 필요한 곳에 주입(injection)까지 해준다.따라서, 제거(Control)가 개발자 -> 스프링으로 역전되었다는 의미로 IoC라고 부른다. DI (Dependency Injection) : 의존성 주입IoC 개념의 실행 방식 중 하나가 바로 DI이다.어떤 객체가 다른 객체를 의존할 때, 원래는 개발자가 new로 직접 생성하거나 setter로 넣어준다. 하지만, 이제는 스프링이 대신 객체를 만들어서, ..