Home > CS > 2024 > πŸ’Ύ [CS] μ—”ν‹°ν‹°(Entity)λŠ” λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ [CS] μ—”ν‹°ν‹°(Entity)λŠ” λ¬΄μ—‡μΌκΉŒμš”?
CS

πŸ’Ύ [CS] μ—”ν‹°ν‹°(Entity)λŠ” λ¬΄μ—‡μΌκΉŒμš”?

  • μ—”ν‹°ν‹°(Entity)λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object-Oriented Programming, OOP)κ³Ό λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ—μ„œ λͺ¨λ‘ μ‚¬μš©λ˜λŠ” κ°œλ…μœΌλ‘œ, 특히 JPA(Java Persistence API)μ—μ„œ 자주 μ–ΈκΈ‰λ©λ‹ˆλ‹€.
  • μ—”ν‹°ν‹°(Entity)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λŠ” μžλ°” 클래슀λ₯Ό μ˜λ―Έν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 각 ν–‰(Row)이 μžλ°” 클래슀의 μΈμŠ€ν„΄μŠ€(Instance, 객체)둜 λŒ€μ‘λ©λ‹ˆλ‹€.

1️⃣ μ—”ν‹°ν‹°μ˜ μ •μ˜.

1️⃣ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν–‰(Record).

  • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” ν…Œμ΄λΈ”μ΄ μ—¬λŸ¬ ν–‰(Record)을 κ°€μ§‘λ‹ˆλ‹€.
    • μ—”ν‹°ν‹°(Entity)λŠ” κ·Έ ν…Œμ΄λΈ”μ˜ 각 ν–‰(Record)을 μžλ°” 객체(Intance)둜 λ³€ν™˜λ©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, User ν…Œμ΄λΈ”μ΄ μžˆλ‹€λ©΄, ν…Œμ΄λΈ”μ˜ 각 λ ˆμ½”λ“œλŠ” User μ—”ν‹°ν‹° 객체둜 λ³€ν™˜λ©λ‹ˆλ‹€.

2️⃣ JPAμ—μ„œμ˜ μ—”ν‹°ν‹°.

  • JPA(Java Persistence API)μ—μ„œλŠ” μ—”ν‹°ν‹°κ°€ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λ©°, 이λ₯Ό μœ„ν•΄ ν΄λž˜μŠ€μ— @Entity μ–΄λ…Έν…Œμ΄μ…˜(Annotation)을 λΆ™μž…λ‹ˆλ‹€.
  • μ—”ν‹°ν‹°(Entity) 클래슀의 μΈμŠ€ν„΄μŠ€(Instance, 객체)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν•˜λ‚˜μ˜ ν–‰(Row, Record)을 λ‚˜νƒ€λ‚΄λ©°, κ·Έ ν•„λ“œλŠ” ν…Œμ΄λΈ”μ˜ 각 μ—΄(Column)에 λ§€ν•‘λ©λ‹ˆλ‹€.

3️⃣ 객체 지ν–₯적 데이터 λͺ¨λΈλ§.

  • μ—”ν‹°ν‹°(Entity)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ ˆμ½”λ“œ(Record)λ₯Ό λ‹¨μˆœνžˆ μžλ°” 객체둜 λ³€ν™˜ν•˜λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—(Object-Oriented Programming, OOP)μ—μ„œμ˜ μƒνƒœ(속성)와 행동(λ©”μ„œλ“œ)을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 즐, 데이터와 κ·Έ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ©”μ„œλ“œκ°€ ν•¨κ»˜ μ •μ˜λ©λ‹ˆλ‹€.

2️⃣ μ—”ν‹°ν‹°μ˜ νŠΉμ§•.

πŸ‘‰ ν΄λž˜μŠ€μ™€ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” 맀핑.

  • μ—”ν‹°ν‹° ν΄λž˜μŠ€λŠ” 보톡 ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ©λ‹ˆλ‹€.

πŸ‘‰ ν•„λ“œμ™€ μ—΄(Column) 맀핑.

  • μ—”ν‹°ν‹° 클래슀의 ν•„λ“œλŠ” ν…Œμ΄λΈ”μ˜ μ—΄(Column)κ³Ό λ§€ν•‘λ©λ‹ˆλ‹€.

πŸ‘‰ κΈ°λ³Έ ν‚€(Primary Key).

  • μ—”ν‹°ν‹°λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ ν•„λ“œλ₯Ό κΈ°λ³Έ ν‚€(Primary Key)둜 지정해야 ν•©λ‹ˆλ‹€.
    • 이 ν•„λ“œλŠ” ν…Œμ΄λΈ”μ—μ„œ 각 ν–‰(Row)을 κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ‘‰ μƒνƒœ 관리.

  • μ—”ν‹°ν‹°λŠ” JPA(Java Persistence API)κ°€ κ΄€λ¦¬ν•˜λ©°, μ—”ν‹°ν‹°μ˜ μƒνƒœ(생성, μˆ˜μ •, μ‚­μ œ)λ₯Ό μžλ™μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ—”ν‹°ν‹° 클래슀의 예.

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;

@Entity // 이 ν΄λž˜μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λŠ” μ—”ν‹°ν‹°μž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
public class User {
    
    @Id // κΈ°λ³Έ ν‚€(Primary Key)λ₯Ό 지정.
    @GeneratedValue(strategy = Generation.IDENTITY) // κΈ°λ³Έ ν‚€(Primary Key) μžλ™ 생성 μ „λž΅ μ„€μ •.
    private Long id;
    
    private String name;
    private String email;
    
    // κΈ°λ³Έ μƒμ„±μž.
    public User() {}
    
    // μƒμ„±μž, getter 및 setter
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
    
    // Getter and Setter
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
}

4️⃣ μ—”ν‹°ν‹°μ˜ μ£Όμš” μš”μ†Œ.

1️⃣ @Entity

  • 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ ν΄λž˜μŠ€κ°€ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

2️⃣ @Id

  • μ—”ν‹°ν‹° 클래슀의 ν•„λ“œ 쀑 ν•˜λ‚˜λŠ” λ°˜λ“œμ‹œ κΈ°λ³Έ ν‚€(Primary Key)둜 μ§€μ •λ˜μ–΄μ•Ό ν•˜λ©°, @Id μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

3️⃣ @GeneratedValue

  • κΈ°λ³Έ ν‚€(Primary Key)κ°€ μžλ™μœΌλ‘œ μƒμ„±λ˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • GenerationType.IDENTITYλŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ μžλ™μœΌλ‘œ ν‚€λ₯Ό μ¦κ°€μ‹œν‚€λ„λ‘ ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€.

5️⃣ μ—”ν‹°ν‹°μ˜ μž₯점.

πŸ‘‰ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό λ°μ΄ν„°λ² μ΄μŠ€μ˜ 톡합.

  • μ—”ν‹°ν‹°λ₯Ό μ‚¬μš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”κ³Ό μžλ°” 객체λ₯Ό μΌκ΄€λœ λ°©μ‹μœΌλ‘œ λ‹€λ£° 수 μžˆμ–΄, μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ μžλ™ν™”λœ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—….

  • JPA와 같은 ν”„λ ˆμž„μ›Œν¬λŠ” μ—”ν‹°ν‹°μ˜ μƒνƒœλ₯Ό μΆ”μ ν•˜μ—¬, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ°œμƒν•˜λŠ” μž‘μ—…(μ‚½μž…, κ°±μ‹ , μ‚­μ œ)을 μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ€λ‹ˆλ‹€.

πŸ‘‰ λ°μ΄ν„°λ² μ΄μŠ€ 독립성.

  • μ—”ν‹°ν‹°λ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • λ°μ΄ν„°λ² μ΄μŠ€μ— μ’…μ†λ˜μ§€ μ•Šκ³  λ‹€μ–‘ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ™μΌν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ μš”μ•½.

  • μ—”ν‹°ν‹°(Entity)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λŠ” μžλ°” 클래슀이며, JPA(Java Persistence API)λ₯Ό 톡해 객체 지ν–₯적인 λ°©μ‹μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.
  • μ—”ν‹°ν‹° ν΄λž˜μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”μ„ μžλ°” 객체(Instance)둜 ν‘œν˜„ν•˜κ³ , ν…Œμ΄λΈ”μ˜ 각 ν–‰(Row)을 μ—”ν‹°ν‹° 객체둜 λ³€ν™˜ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.