ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ฉด์ Entity์ ํํ DTO์ ์ฐ๋ Data Class ์ฌ์ฉํด๋ ๋ ๊น๋ผ๋ ์๋ฌธ์ด ๋ค์๋ค. Data Class๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ ์ฌ์ฉํ๊ณ , ์ ์ํ copy(), equal(), toString() ๊ฐ์ ๋ฉ์๋๋ค์ ์ง์ํด์ฃผ๋๊น ์ฌ์ฉํด๋ ๋๊ฒ ์ง! ๋ผ๋ ์๊ฐ์ด ๋ค์์ง๋ง ๊ฒฐ๋ก ์ ๋ถํ๋ฉด ์๋๋๊ฒ์ ๊นจ๋ณ์๋ค.
์ผ๋จ ์ฒซ๋ฒ์งธ๋ก data class๊ฐ ๋ฌด์์ธ์ง ์์๋ณด์.
Data Class๋ ์ผ๋ฐ ํด๋์ค์ ๋ฌ๋ฆฌ, ์์์ ๋งํ๋ค ์ถ์ด ๋ฐ์ดํฐ ๋ณด๊ด ๋ชฉ์ ์ผ๋ก ๋ง๋ ํด๋์ค์ด๊ณ , ๋ค์ํ ๋ฉ์๋๋ฅผ ์๋ ์์ฑํด์ฃผ๋ ํด๋์ค์ด๋ค.
Data Class ์์ฑ์ ๋ง๋ค์ด์ง๋ ๋ฉ์๋๋ก๋
์ด๋ ๊ฒ ์๊ณ , ๋ํ ์ฌ๋ฌ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
Dirty Check์ Entity๋ฅผ ์ค๋ ์ท์ ์ฐ์ด ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋ง ๊ทธ๋๋ก ๋ณ๊ฒฝ๋๊ฒ์ด ์์ผ๋ฉด ์์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ฃผ๋๊ฒ์ ์๋ฏธํ๋ค.
Entity๋ฅผ Data Class๋ก ์ง์ ํด์ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด hashCode()
, equal()
๋ฉ์๋๊ฐ Hibernate์ Dirty Check ๊ฒ์ฌ ๋ฉ์ปค๋์ฆ์ ์๊ตฌ์ ํธํ๋์ง ์์ Dirty Check๊ฐ ๋ถ๊ฐ๋ฅ ํ๋ค.
๋ํ equal()
๋ฉ์๋๋ ๊ฐ์ฒด์ ๋ชจ๋ ํ๋ ์์ฑ์ด ๋์ผํ์ง ๋น๊ตํ์ง๋ง Hibernate๋ ๊ธฐ๋ณธ ํค ํ๋๋ง ๋น๊ตํ๋ค. ์ด๋ ๊ฒ ๋ชจ๋ ํ๋์ ์์ฑ์ด ๋์ผํ์ง ํ์ธํ ์ ์์ผ๋ฏ๋ก ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ ์๋ค.
์ง์ฐ ๋ก๋ฉ์ ๊ฐ์ฒด๋ฅผ ํ์ํ ์์ ์ ์ฐ๊ด๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๊ฒ์ด๋ค. ์ง์ฐ๋ก๋ฉ์ ๋ฐ๋๋ ์ฆ์ ๋ก๋ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฐ๊ด๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ถ๋ ค์ค๋๊ฒ์ด๋ค. ์ฆ์ ๋ก๋ฉ์ผ๋ก ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ฉด ์๋๋ ๋น ๋ฅด๊ฒ ์ง๋ง ๋ถ๋ฌ๋๊ณ ์ฐ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ง ์๋น ๋๋ค๋ ๋จ์ ์ด ์๋ค.
@Entity
public class Member {
@Id
@Column(name = "member_id")
private String id;
private String name;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
}
// ์ง์ฐ ๋ก๋ฉ ์คํ ์ฝ๋
Member member = em.find(Member.class, "member1");
Team team = member.getTeam(); // ๊ฐ์ฒด ๊ทธ๋ํ ํ์
team.getName(); // ํ ๊ฐ์ฒด ์ค์ ์ฌ์ฉ
์์ ์ง์ฐ ๋ก๋ฉ์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์๋ก ๋ณด์๋ฉด Entity Manger๋ฅผ ์ด์ฉํด์ member๋ฅผ ์กฐํ ํ ๋ member1๋ง ์กฐํํ๊ณ team์ ์กฐํํ์ง ์๋๋ค. ๋์ ์ ๊ฐ์ฒด๋ฅผ ์์์ ์ด์ฉํด์ proxy ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์กฐํํ๋ค.
์์์ ๋งํ๋ค ์ถ์ด Data Class๋ ์์์ด ๋ถ๊ฐ๋ฅํ๋ค! ์์์ ํ๊ธฐ ์ํด์ open ํค์๋๋ฅผ ๋ถํ ์๋ ์๋ค!
์ด ๋๋ฌธ์ Entity์ Data Class๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ง์ฐ๋ก๋ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.