728x90
๐ก ํ์ฌ์์ ๋ณธ๊ฒฉ์ ์ผ๋ก ORM์ ํ์ฉํ์ฌ API๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์์ํ๋ฉด์ ์ ์๋ ์๋ฌด๋ ์ง ์๊ฒ ๋ฐฐ์ด ๋๋ก ๋ฐ๋ผ ์น๋ ๊ฒ๋ค์ด ํ๋ํ๋ ์ ์ด๋ ๊ฒ ๋๋์ง ์์ฌ์ด ์๊ธฐ๊ณ ๊ถ๊ธํด์ง๊ธฐ ์์ํ๋ค. ๊ทธ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ Entity ํด๋์ค์ ๋ํด ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํ๋ค. ์ด ๊ธ์์ ์ ๋ฆฌํ Entity์ ๋ํ ์ ๋ณด๋ ๊ณผ๊ฑฐ์ ๋ด๊ฐ ์ ์ ์ด ๊ธ์์ ๊ทธ๋๋ก ๊ฐ์ ธ์๋ค.
Entity ํด๋์ค
- ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํต์ฌ ํด๋์ค์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์กด์ฌํ๋ ์นผ๋ผ๋ค์ ํ๋๋ก ๊ฐ์ง๋ ๊ฐ์ฒด์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ 1:1 ๋งคํ์ด ๋๋ฏ๋ก ํ ์ด๋ธ์ด ๊ฐ์ง๊ณ ์์ง ์๋ ์นผ๋ผ์ ํ๋๋ก ๊ฐ์ ธ์๋ ์ ๋๋ค.
- Entity ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์์ฑ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ, ์๋ต ๋ฑ์ ์ฌ์ฉ๋์ด์๋ ์ ๋๋ค.
- DB๋ก๋ถํฐ ์กฐํ๋ Entity๋ฅผ ๊ทธ๋๋ก View๋ก ๋๊ธฐ๊ฒ ๋๋ค๋ฉด ๋ถํ์ํ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ ๋ฑ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- setter ๋ฉ์๋์ ์ฌ์ฉ์ ์ง์ํด์ผ ํ๋ค. ๋ณ๊ฒฝ๋์ง ์๋ ์ธ์คํด์ค์ ๋ํด์๋ setter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ๋ฌด๊ฒฐ์ฑ, ์ผ๊ด์ฑ ๋ฑ ๋ณ์กฐ๋์ง ์์์ ๋ณด์ฅํ ์ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์์ฑ์๋ฅผ ์ด์ฉํด ์ด๊ธฐํํ์ฌ ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- Builder๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉค๋ฒ ๋ณ์๊ฐ ๋ง์์ง๋๋ผ๋ ์ด๋ค ๊ฐ์ ์ด๋ค ํ๋์ ๋ฃ๋์ง ์ฝ๋๋ฅผ ํตํด ์ก์์ผ๋ก ํ์ธ ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ, ์์๋ ์๊ด์ด ์๊ณ , ์ค๊ฐ์ ๊ฐ์ ํ๋๋ง ๋ฐ๊พธ๋ ์์ ์ด ๋ถ๊ฐ๋ฅํด setter์ ๋นํด ์์ ํ๋ค.
์ ๋ด์ฉ์ ๊ณ ๋ คํ์ฌ Entity ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ณด์.
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
private String username;
}
- ์์ฃผ ๊ฐ๋จํ Member Entity์ด๋ค.
- @Entity๋ฅผ ๋ถ์ด๋ฉด JPA์๊ฒ Entity ๊ฐ์ฒด์์ ๋ช ์ํ์ฌ ๊ด๋ฆฌํ๋๋ก ํ ์ ์๋ค.
- ์, ์ฌ๊ธฐ์ ํ์ํ ์ ๋ํ ์ด์ ์ ํ๋ ์ถ๊ฐํด ๋ณด์.
@Entity
@Getter // ์ถ๊ฐ
public class Member {
@Id
@GeneratedValue
private Long id;
private String username;
}
- @Getter ์ ๋ํ ์ด์ ์ ๋ถ์๋ค.
- ์ด๋ก์จ ์ธ๋ถ์์ Member Entity์ id๋ username๊ณผ ๊ฐ์ ์์ฑ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋์๋ค.
- @Getter๋ฅผ ์ด์ฉํ์ฌ ์๋น์ค ๋จ์์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ๋๋, Dto ๊ฐ์ฒด์์ ๋งคํ ์์ ์ ํ ๋ Member ์ํฐํฐ๋ฅผ ์ฌ์ฉ๋ ์ ์๊ฒ ๋์๋ค.
- @Setter ์ญ์ ๋น์ทํ ์ด์ ๋ก ์ฌ์ฉํ ์ ์์ผ๋, setter๋ ์กด์ฌ๋ง์ผ๋ก Entity ๊ฐ์ฒด์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ผ๊ด์ฑ ๋ฑ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๊ฒ ๋๋ค. ์ด๋์๋ ํจ๋ถ๋ก ์ฐ์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- Entity ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ์ ๋งคํ ์์ ์ด์ธ์ ์ผ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด Entity ๊ฐ์ฒด๊ฐ ๋งก๋ ์ญํ ์ด ๋ง์์ ธ ์์กด์ฑ์ด ์ฌ๋ผ๊ฐ๊ณ ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๊ฐ ์ฌ๋ผ๊ฐ ๊ฐ์ฒด์งํฅ ๊ด์ ์์ ์ข์ง ๋ชปํ ์ฝ๋๊ฐ ๋ ์ ์๋ค.
- ๋ฐ๋ผ์ Dto ๊ฐ์ฒด์ ๋งคํ์ ํ์ฌ ์ญํ ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ ์ํด Setter ์ญํ ์ ํ๋ ๋ฌด์ธ๊ฐ๊ฐ ๋ฐ๋์ ํ์ํ๊ธด ํ๋ค. ์ด๋ป๊ฒ Setter๋ฅผ ์ฐ์ง ์๊ณ ํด๊ฒฐํ ์ ์์๊น? ์์ฑ์ ๋ฉ์๋ ๋ฑ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ @Builder์ ๋ํด ์์๋ณด์!
@Builder ์ฌ์ฉํ๊ธฐ
- ์์ ์ฝ๋์ @Builder๋ฅผ ์ถ๊ฐํด ์ธํ ๋ฆฌ์ ์ด์ ์ฎ๊ฒผ๋๋ Member์ ๋นจ๊ฐ ์ค์ด ๊ทธ์ด์ก๋ค.
- ์ธํ ๋ฆฌ์ ์ด์ ์ค๋ช ์ ์ฝ์ด๋ณด์.
- @Builder ์ ๋ํ ์ด์ ์ ์ถ๊ฐํ๋ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ธํ ๋ฆฌ์ ์ด ๋ง๋๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ถ๊ฐํด ๋ณด์.
- ์๋ฌ๊ฐ ์ฌ๋ผ์ก๋ค.
- ๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๋ถ๋ถ์ด ์๋ค. @NoArgsConstuctor๋ฅผ ์ ๋๋ก ๋๊ฒ ๋๋ฉด ์ด๋์ ๊ฐ ์๋ฌด๋ฐ ๊ฐ๋ ๊ฐ์ง์ง ์๋ ์๋ฏธ ์๋ ๊ฐ์ฒด์ ์์ฑ ๊ฐ๋ฅ์ฑ์ ์ด์ด๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ NoArgsConstuctor์ ์ ๊ทผ ์ ์ด๋ฅผ PROTECTED๋ก ์ค์ ํ์ฌ ์ฌ์ ์ ๋ฌด๋ถ๋ณํ ๊ฐ์ฒด ์์ฑ์ ๊ฐ๋ฅ์ฑ์ ์ฐจ๋จํ๋ ๊ฒ์ด ์ข๋ค.
- ์ด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํด ๋ณด์.
- ์ด๋ผ..? builder ์ ๋ํ ์ด์ ์ด ์ ์ฉ์ด ๋์ง ์๋ ๊ฒ ๊ฐ๋ค.
- ๊ธํ ๋๋ก @Setter๋ฅผ ์ถ๊ฐํด์ ํ ์คํธ๋ฅผ ํด๋ณด์๋ค.
constructor Member in class jpabook.jpashop.Member cannot be applied to given types;
- ์ด ์ค๋ฅ ๋ฉ์์ง๋ Member ํด๋์ค์ Long๊ณผ String์ด๋ผ๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ์์ํ๋ ์์ฑ์๋ฅผ ํธ์ถํ๋ ค๊ณ ์๋ํ์์ผ๋ ์คํจํ์์ ๋ํ๋ธ๋ค.
- @Builder์์ ๋น๋ ํจํด์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ ํ๋๋ฅผ ์ธ์๋ก ๊ฐ์ง๋ ์์ฑ์๋ฅผ ์๊ตฌํ๋ค.
- ์์ builder ์ ๋ํ ์ด์ ์ด ์ ์ฉ ์ ๋๋ ๋ฐ๋ ๋ค ์ด์ ๊ฐ ์์๋ค.
- ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์์ ์ธ๊ธํ ๋๋ก ๋ชจ๋ ํ๋๋ฅผ ์ธ์๋ก ๊ฐ์ง๋ ์์ฑ์๊ฐ ํ์ํ๋ฐ ๋น์ฅ ๋ ์ค๋ฅด๋ ๊ฒ์ @AllArgsConstructor์ด๋ค. ๋ฐ๋ก ์ ์ฉํด ๋ณด์.
- ๋ฌธ์ ์์ด ๋์๊ฐ๊ธด ํ๋๋ฐ ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ด ์๋ค.
- @AllArgsConstructor๋ ํด๋์ค์ ์กด์ฌํ๋ ๋ชจ๋ ํ๋์ ๋ํ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ์ ๋ํ ์ด์ ์ด๋ค.
- ์ธ๋ป ๋ณด๊ธฐ์๋ ํธํด ๋ณด์ด์ง๋ง @AllArgsConstructor์ @RequiredArgsConstructor๋ ์ธ์คํด์ค ๋ฉค๋ฒ์ ์ ์ธ ์์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ณ์์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด ์์ฑ์์ ์
๋ ฅ๊ฐ ์์๋ ๋ฐ๋์ด ๋ฏธ๋์ ๋ฐ๊ฒฌํ๊ธฐ ์ด๋ ค์ด ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.(์ถ๊ฐ์ ์ธ ์์
์ ๋ฐ๋ผ ๋ณ์์ ์ ์ธ ์์๋ ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.)
- ์์ ์์๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ์ ์ธ๋ ๋ณ์์ ์์๊ฐ ๋ฐ๋ ๋ ์ด๋ ํ ๊ฒฝ๊ณ ๋ฉ์์ง๋ ๋ฐ์ํ์ง ์๋๋ค.(์ด๊ฒ์ด ์์๊ฐ ์๋๋ผ ์ค์ ์ํฉ์ด๋ผ ์ฃผ๋ฌธ๋๊ณผ ์ทจ์๋์ด ๋ค๋ฐ๋์๋ค๋ฉด..?)
- ๊ทธ๋๋ง ๊ฐํ ๋ฆฌ์ ์ด๋ ํ๋ผ๋ฏธํฐ ๊ฐ ์์ ํ๋๋ช ์ ํ์ํด์ฃผ๊ณ ์๋ค.
- ํ์ง๋ง ์ค๋ฌด์ฒ๋ผ ๋ณต์กํ ๋ก์ง๊ณผ ์๋ง์ ํด๋์ค๊ฐ ์๋ฉ ์๋ ์ํฉ์์๋ ๋์น์ฑ๊ธฐ๊ฐ ํ๋ค์ด ํ ์๊ฐ์ ์ค์๋ก ์น๋ช ์ ์ธ ๊ฒฐํจ์ ๋ฐ์์ํฌ ์ ์๋ค!
- ๋ฐ๋ผ์, ํด๋์ค ๋ ๋ฒจ์ @Builder์ @AllargsConstructor๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ์์ฑ์๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ณ ์์ฑ์์ @Builder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ๊ฒฐ๋ก ! @Builder๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด @AllargsConstructor๋ณด๋ค๋ ์ง์ ์์ฑ์๋ฅผ ๋ง๋ค์.
- ์์ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ํด๊ฒฐํ @Builder๋ฅผ ํ์ฉํ Member Entity์ด๋ค.
- ๋น๋ ํจํด์ ํ์ฉํ์ฌ Entity ๊ฐ์ฒด๋ผ๋ ๋ณธ์ฐ์ ์ญํ ์ ์ง์คํ๋ฉด์ ์๋น์ค ๋จ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ ๋๋, DTO ๊ฐ์ฒด์ ๋งคํํ ๋์๋ Entity ๊ฐ์ฒด์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๊ฒ ๋์๋ค.
๋น๋ ํจํด ์ฌ์ฉ ์ ๊ณ ๋ ค ์ฌํญ
- ๋๋ถ๋ถ์ ๊ธฐ์ ์ด ๊ทธ๋ ๋ ๋น๋ ํจํด ์ญ์ ๋ง๋ฅ์ ์๋๋ค.
- ์ฝ๋์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๋ค.
- ์์ฑ์๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค. ๋งค๋ฒ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋น๋๋ฅผ ๊ฑฐ์ณ ์ธ์คํด์คํํ๊ธฐ ๋๋ฌธ์ด๋ค.(๋น์ฉ์ ํฌ์ง ์๋ค.)
- ํด๋์ค ํ๋์ ๊ฐ์๊ฐ 4๊ฐ ๋ฏธ๋ง์ด๊ฑฐ๋, ํ๋์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์์ฑ์๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ ์ข์ ์ ์๋ค๊ณ ํ๋ค.
์ฐธ๊ณ
https://siahn95.tistory.com/170#์ฃผ์์ฌํญ%20๋ฐ%20๋จ์ -1
https://velog.io/@mooh2jj/์ฌ๋ฐ๋ฅธ-์ํฐํฐ-Builder-์ฌ์ฉ๋ฒ
728x90