π[Backend Development] Domain Layer, JPA Entity μμ±μ λ°λμ μ§μΌμΌ ν μ€μ μμΉλ€
Java Spring νλ μμν¬λ‘ νλ‘μ νΈλ₯Ό μ§νν λ Domain Layer, νΉν JPA Entityλ₯Ό μμ±ν λ λ°λμ μ§μΌμΌ ν μ€μν μμΉλ€μ΄ μμ΅λλ€.
μ΄ μμΉλ€μ μ½λμ μμ μ±, μ μ§λ³΄μμ±, κ·Έλ¦¬κ³ μμμΉ λͺ»ν λ²κ·Έλ₯Ό λ°©μ§νκΈ° μν΄ κΌ νμν©λλ€.
β 1. κΈ°λ³Έ μμ±μ(No-Arg Constructor)λ₯Ό λ°λμ μ 곡νμΈμ.
JPAλ λ°μ΄ν°λ² μ΄μ€μμ μ‘°νν λ°μ΄ν°λ‘ κ°μ²΄λ₯Ό μμ±ν λ, λ¨Όμ λΉ κ°μ²΄λ₯Ό λ§λ ν κ° νλμ κ°μ μ±μ λ£μ΅λλ€.
μ΄λ λΉ κ°μ²΄λ₯Ό λ§λ€κΈ° μν΄ νλΌλ―Έν°κ° μλ κΈ°λ³Έ μμ±μκ° λ°λμ νμν©λλ€.
-
λ°©λ² : Lombokμ
@NoArgsConstructor(access = AccessLevel.PROTECTED)
λ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ μ’μ΅λλ€. -
μ΄μ :
protexted
λ‘ μ κ·Όμ μ ννλ©΄, κ°λ°μκ° λΉμ¦λμ€ λ‘μ§μμnew Product()
μ²λΌ λΆμμ ν κ°μ²΄λ₯Ό μ€μλ‘ μμ±νλ κ²μ λ§μ μμ μ±μ λμΌ μ μμ΅λλ€.
β 2. Setter μ¬μ©μ μ§μνκ³ , λΆλ³μ±(Immutability)μ μΆκ΅¬νμΈμ.
Entity κ°μ²΄μ 무λΆλ³ν setter
λ©μλλ₯Ό μ΄μ΄λλ©΄, μ ν리μΌμ΄μ
μ μ¬λ¬ κ³³μμ κ°μ²΄μ μνκ° μλμΉ μκ² λ³κ²½λ μ μμ΄ λ°μ΄ν°μ μΌκ΄μ±μ ν΄μΉκ³ λ²κ·Έλ₯Ό μ λ°νκΈ° μ½μ΅λλ€.
-
λ°©λ² :
- κ°μ²΄ μμ±μ
@Builder
λ₯Ό ν΅ν΄ λͺ ννκ² ν©λλ€. -
setter
λ₯Ό λ§λλ λμ , μνλ₯Ό λ³κ²½ν΄μΌ ν λλ κ·Έ μλκ° λͺ νν λλ¬λλ λΉμ¦λμ€ λ©μλλ₯Ό λ§λμΈμ. (μ:product.changePrice(newPrice
)
- κ°μ²΄ μμ±μ
β
3. λͺ¨λ νλλ₯Ό ν¬ν¨νλ equals()
μ hashCode()
λ₯Ό νΌνμΈμ.
JPA Entityμ μΌλ°μ μΈ Lombokμ @EqualsAndHashCode
λ₯Ό μ¬μ©νλ©΄, μ°κ΄κ΄κ³ νλλ‘ μΈν΄ μκΈ°μΉ μμ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
λ μν°ν°κ° μλ‘λ₯Ό μ°Έμ‘°νλ κ²½μ° λ¬΄ν 루νμ λΉ μ§ μ μμ΅λλ€.
-
λ°©λ² : κ°μ²΄μ κ³ μ μ±μ 보μ₯νλ PK(
@Id
) νλλ§μ λΉκ΅νλλ‘ κ΅¬ννλ κ²μ΄ κ°μ₯ μμ ν©λλ€. -
Lombok μ¬μ© μ :
@EqualsAndHashCode(of = "productId")
μ κ°μ΄of
μμ±μ μ¬μ©νμ¬ PK νλλ§ λͺ μμ μΌλ‘ μ§μ ν΄ μ£ΌμΈμ.
β
4. toString()
μ¬μ©μ μ£ΌμνμΈμ.
@ToString
μ΄λ
Έν
μ΄μ
μ 무μ¬μ½ μ¬μ©νλ©΄, μ°κ΄λ λͺ¨λ μν°ν°λ₯Ό μ‘°ννλ €λ μΏΌλ¦¬κ° λ°μνμ¬ μ±λ₯ μ νλ₯Ό μΌμΌν€κ±°λ, μλ°©ν₯ μ°κ΄κ΄κ³μμ 무ν 루νμ StackOverflowError
λ₯Ό μ λ°ν μ μμ΅λλ€.
-
λ°©λ² : μ°κ΄κ΄κ³λ₯Ό λ§Ίκ³ μλ νλλ
@ToString.Exclude
λ₯Ό μ¬μ©νμ¬toString()
κ²°κ³Όμμ μ μΈνλ κ²μ΄ μμ ν©λλ€.
β 5. Entityλ₯Ό API μμ²(Request)/μλ΅(Response)μ μ§μ μ¬μ©νμ§ λ§μΈμ.
Entityλ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈκ³Ό μ§μ μ°κ²°λ, μμ€ν
μ κ°μ₯ ν΅μ¬μ μΈ λ°μ΄ν° λͺ¨λΈμ
λλ€.
μ΄λ₯Ό μΈλΆμ κ·Έλλ‘ λ
ΈμΆνλ©΄ 보μμ μ·¨μ½νκ³ , λ΄λΆ λ‘μ§μ λ³κ²½μ΄ API λͺ
μΈμ μ§μ μ μΈ μν₯μ μ£Όκ² λμ΄ μ μ°μ±μ΄ λ¨μ΄μ§λλ€.
- λ°©λ² : λ°λμ DTO(Data Transfer Object) λ₯Ό μ¬μ©νμ¬, APIμ μμ²κ³Ό μλ΅ λ°μ΄ν°λ₯Ό Entityμ λΆλ¦¬νμΈμ. μ΄λ μ§κΈκΉμ§ μ°λ¦¬κ° API λͺ μΈμλ₯Ό μ€κ³νλ©° μ§μΌμ¨ κ°μ₯ μ€μν μμΉμ λλ€.