ν™ˆ Entity, DTO, VO
포슀트
μ·¨μ†Œ

Entity, DTO, VO

πŸ’» Entity

μ‹€μ œ DB의 ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λŠ” 클래슀둜 idκ°’μœΌλ‘œ κ΅¬λΆ„μ΄λ˜λ©°, λ‘œμ§μ„ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜μ˜ μ˜ˆμ‹œλŠ” JPAλ₯Ό ν™œμš©ν•œ Entity μ½”λ“œ μž…λ‹ˆλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    public User() {}

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public Long getId() {
        return this.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 this.email;
    }

    public void setEmail(String email) {
        return this.email = email;
    }
}

μ½”λ“œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ DB의 ν•„λ“œλ“€μ΄ 클래슀 λ‚΄μ˜ μ†μ„±μœΌλ‘œ λ“€μ–΄κ°€ μžˆλŠ”κ²ƒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» DTO (Data Transfer Object)

계측간 데이터 κ΅ν™˜μ„ μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 객체둜 λ‘œμ§μ„ 갖지 μ•ŠμœΌλ©°, getter/setter λ©”μ†Œλ“œλ§Œ κ°–λŠ” κ°μ²΄μž…λ‹ˆλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class UserDTO {
    private Long id;
    private String name;
    private String email;

    public UserDTO(Long id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    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;
    }
}

μœ„ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ νŠΉλ³„ν•œ 둜직 없이 getter/setter λ©”μ„œλ“œλ§Œ μžˆλŠ”κ²ƒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’» VO (Value Object)

값을 ν‘œν˜„ν•˜λŠ” 객체둜 λ‘œμ§μ„ 포함할 수 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€.
VOλŠ” 객체의 λΆˆλ³€μ„± 보μž₯ν•˜λ©°, μ„œλ‘œ λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ—¬λ„ λ‚΄λΆ€μ˜ 속성값이 κ°™λ‹€λ©΄ 같은 객체둜 κ°„μ£Όν•©λ‹ˆλ‹€. λ‚΄λΆ€ 속성이 κ°™μ„λ•Œ 같은 μΈμŠ€ν„΄μŠ€λ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ VO λ‚΄λΆ€μ—μ„œ equals()와 hashCode()λ₯Ό μ˜€λ²„λΌμ΄λ”© ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Email {
    private String value;

    public Email(String value) {
        if (value == null) {
            throw new IllegalArgumentException("Email value cannot be null");
        }
        if (!isValidEmail(value)) {
            throw new IllegalArgumentException("Invalid email format: " + value);
        }
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Email email = (Email) o;
        return Objects.equals(value, email.value);
    }

    @Override
    public int hashCode() {
        return Objects.hash(value);
    }
}

μœ„ μ½”λ“œμ—μ„œμ™€ 같이 VOλŠ” λ‘œμ§μ„ 포함할 수 있으며, setterλ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„ λΆˆλ³€μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 속성값이 같을 경우 μΈμŠ€ν„΄μŠ€λ“€μ΄ 동일함을 μ•Œλ €μ€„ 수 μžˆλ„λ‘ equal을 μ˜€λ²„λΌμ΄λ”©ν•΄μ„œ κ΅¬ν˜„ν–ˆμŒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

DDD vs SQL 쀑심 섀계

Controller, Service, Repository