๋ด๊ฐ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ , Spring์ด ํ์ํ ๊ฐ์ฒด๋ฅผ ๋์ ์ฃผ์ ํด์ฃผ๋ ๊ฐ๋
โ ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๋์
| ๋ฐฉ์ | ์ค๋ช | ์ค๋ฌด ์ถ์ฒ |
|---|---|---|
ํ๋ ์ฃผ์
@Autowired | ๊ฐ์ฒด๋ฅผ ๋ง๋ ํ ํ๋์ ๊ฐ ์ฃผ์ | โ ์ง์ |
์์ฑ์ ์ฃผ์
@RequiredArgsConstructor | ๊ฐ์ฒด ์์ฑ ์์ ์ ์ฃผ์ | โ ํ์ค |
์ธํฐ ์ฃผ์
setX(...) | ํ์ํ ๋ ์ฃผ์ ๊ฐ๋ฅ | โ ์ง์ (๋ถ๋ณ ๊นจ์ง) |
@Autowired vs @RequiredArgsConstructor| ํญ๋ชฉ | @Autowired (ํ๋ ์ฃผ์
) | ์์ฑ์ ์ฃผ์
(@RequiredArgsConstructor) |
|---|---|---|
| ์ฃผ์ ์์ | ๊ฐ์ฒด ๋ง๋ ํ ๋์ค์ ์ฃผ์ | ๊ฐ์ฒด ์์ฑ ์์ ์ ์ฃผ์ |
final ์ฌ์ฉ | โ ๋ถ๊ฐ๋ฅ | โ ๊ฐ๋ฅ (๋ถ๋ณ์ฑ ์ ์ง) |
| ํ ์คํธ ์ฉ์ด์ฑ | โ ์ด๋ ต๋ค | โ Mock ์ฃผ์ ์ฌ์ |
| ๊ฐ๋ ์ฑ | โ ์จ๊ฒจ์ ธ ์์ด ์ถ์ ์ด๋ ค์ | โ ์์ฑ์์ ๋ช ์์ ์ผ๋ก ๋๋ฌ๋จ |
| ์ค๋ฅ ํ์ง | โ ์คํ ์์ ์ค๋ฅ (NPE ๋ฑ) | โ ์ปดํ์ผ ํ์ ์ค๋ฅ๋ก ๋น ๋ฅด๊ฒ ํ์ธ |
| Spring ๊ณต์ ๊ถ์ฅ | โ ์๋ | โ ๊ณต์ ์ถ์ฒ ๋ฐฉ์ |
@Autowired = ์๋ฐ: ๋จผ์ ์๋ฐ ๋๊ณ ๋์ค์ ์ด๊ฒ์ ๊ฒ ์ฌ๋ฆผ (์ค๊ฐ์ ์ด์ํ ๊ฑฐ ์์ผ ์ ์์)@Setter๋ ์ ์ง์ํ ๊น?| ์ด์ | ์ค๋ช |
|---|---|
| ๋ณด์ ๋ฌธ์ | ๋น๋ฐ๋ฒํธ, ์ด๋ฉ์ผ ๋ฑ ๋ฏผ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ์์ ๋ณ๊ฒฝ๋ ์ ์์ |
| ๋ถ๋ณ์ฑ ๊นจ์ง | final ๋ถ๊ฐ, ์ค๊ฐ์ ๊ฐ์ด ๋ฐ๋ ์ ์์ |
| ๊ฐ์ฒด ์์ ์ฑ ์ ํ | ๋ฐํ์์ ์์ ๋ชป ํ ๋์ ๋ฐ์ ์ํ |
โ
์ค๋ฌด์์ @Getter + @Builder ์กฐํฉ + ๋ถ๋ณ ๊ฐ์ฒด ์ค๊ณ๋ฅผ ์ ํธ
ํ ์คํธ์ฉ ๊ฐ์ง ๊ฐ์ฒด
์ค์ ๋์์ ํ์ง ์์ง๋ง ํธ์ถ ์ฌ๋ถ / ๋ฐํ๊ฐ ์ค์ ๋ฑ์ ํตํด ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ํ ์ ์์
| ๋๊ตฌ | ์ญํ |
|---|---|
Mockito.mock(...) | ์ง์ง ๊ฐ์ฒด ๋์ ๊ฐ์ง ๊ฐ์ฒด ์์ฑ |
when(...).thenReturn(...) | ์ํ๋ ๊ฐ ๋ฐํํ๋๋ก ์ค์ |
verify(...) | ๋ฉ์๋๊ฐ ๋ช ๋ฒ ํธ์ถ๋๋์ง ๊ฒ์ฆ |
โ JUnit + Mockito ์กฐํฉ์ Spring Boot ํ ์คํธ์ ์ฌ์ค์ ํ์ค
| ํญ๋ชฉ | ๊ถ์ฅ ์ฌ๋ถ | ์ด์ |
|---|---|---|
@Autowired | โ | ๋ณ๊ฒฝ ์ํ, ํ ์คํธ ์ด๋ ค์ |
์์ฑ์ ์ฃผ์
+ @RequiredArgsConstructor | โ | ๋ถ๋ณ์ฑ, ์์ ์ฑ, ๊ฐ๋ ์ฑ ์ฐ์ |
@Setter | โ | ์ธ๋ถ ๋ณ๊ฒฝ ์ํ, ๋ถ๋ณ ๊ฐ์ฒด ์ค๊ณ์ ์ถฉ๋ |
| Mock ํ ์คํธ | โ | ์ธ๋ถ ์ํฅ ์์ด ๋น ๋ฅด๊ณ ์์ ์ ์ธ ํ ์คํธ ๊ฐ๋ฅ |