2022. 8. 31. 16:39ใJAVA/Effective JAVA
2์ฅ. ๊ฐ์ฒด ์์ฑ๊ณผ ํ๊ดด
์์ดํ 1. ์์ฑ์ ๋์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ๋ผ.
๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ป๋ ๋ฐฉ๋ฒ ์ค ํํ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ public ์์ฑ์์ด๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ ์ค ๊ผญ ์์๋ฌ์ผ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ ํํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํด๋์ค๋ ์์ฑ์์ ๋ณ๋๋ก ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋(static factory method)๋ฅผ ์ ๊ณตํ ์ ์๋ค.
(ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋จ์ํ ์ ์ ๋ฉ์๋)
-> Boolean์ valueof() ๋ฉ์๋์์ ๋ณผ ์ ์๋ฏ์ด ๊ธฐ๋ณธ ํ์ ์ธ boolean b ๊ฐ์ ๋ฐ์
Boolean ๊ฐ์ฒด ์ฐธ์กฐ๋ก ๋ณํํด์ค๋ค.
โ๏ธ ์ฃผ์
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ๋์์ธ ํจํด์ ํฉํฐ๋ฆฌ ๋ฉ์๋์๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ํท๊ฐ๋ฆฌ๋ฉด ์๋๋ค.
ํด๋์ค๋ ํด๋ผ์ด์ธํธ์๊ฒ public ์์ ์ ๋์ ๋๋ ํจ๊ป ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ ์ ์๋๋ฐ
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋ฐฉ์์๋ ์ฅ์ ๊ณผ ๋จ์ ์ด ์กด์ฌํ๋ค.
- ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ์ฅ์
1๏ธโฃ ์ด๋ฆ์ ๊ฐ์ง ์ ์๋ค.
Order๋ผ๋ ํด๋์ค๊ฐ ์๋ค๊ณ ํ ๋, ์์ฑ์์ boolean, Product ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ ์๋ค.
์ฒซ๋ฒ์งธ ์์ฑ์๋ boolean ์ ๋ณ์๋ช ์ด prime ์ด๊ณ ๋๋ฒ์งธ ์์ฑ์๋ urgent ๋ผ๊ณ ํด๋ ์์ฑ์๋ ํ์ ๋น๊ต๊น์ง๋ง ํ๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ ์์ฑ์๋ฅผ ๋ง๋ค ์ ์์ด์ ์๋ฌ๊ฐ ๋ํ๋๊ณ ์๋ค.
(ํ๋์ signature๋ก๋ ์์ฑ์๋ ํ๋๋ง ๋ง๋ค ์ ์๋ค.)
๋ง์ฝ ๋๋ฒ์งธ ์์ฑ์์ ํ์ ์์๋ฅผ ๋ฐ๊พผ๋ค๋ฉด ์๋ฌ๋ ์์ด์ง ์ ์๊ธฐ๋ ํ์ง๋ง ๋ฉ์๋๋ช ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ์ฌ์ฉํ ๋
์ ํํ ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผํ ์ง ํท๊ฐ๋ฆด ์ ์์ด ํด๋์ค ์ค๋ช ๋ฌธ์๋ฅผ ํ์ธํ์ง ์๊ณ ์๋ ์๋ฏธ๋ฅผ ์์ง ๋ชปํ ๊ฒ์ด๋ค.
์์ฑ์์ ๋๊ธฐ๋ ๋งค๊ฐ๋ณ์์ ์์ฑ์ ์์ฒด๋ง์ผ๋ก๋ ๋ฐํ๋ ๊ฐ์ฒด์ ํน์ฑ์ ์ ๋๋ก ์ค๋ช ํ์ง ๋ชปํ๋ค.
๋ฐ๋ฉด์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ์ด๋ฆ๋ง ์ ์ง์ผ๋ฉด ๋ฐํ๋ ๊ฐ์ฒด์ ํน์ฑ์ ์ฝ๊ฒ ๋ฌ์ฌํ ์ ์๋ค.
๐ฅ
์ด๋ฆ์ ๊ฐ์ง ์ ์๋ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ํ ํด๋์ค์ ์๊ทธ๋์ฒ๊ฐ ๊ฐ์ ์์ฑ์๊ฐ ์ฌ๋ฌ ๊ฐ ํ์ํ ๊ฒ ๊ฐ์ผ๋ฉด,
์์ฑ์๋ฅผ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ก ๋ฐ๊พธ๊ณ ๊ฐ๊ฐ์ ์ฐจ์ด๋ฅผ ์ ๋๋ฌ๋ด๋ ์ด๋ฆ์ ์ง์ด์ฃผ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์.
2๏ธโฃ ํธ์ถ๋ ๋ ๋ง๋ค ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ์ง๋ ์์๋ ๋๋ค.
์์ฑ์๋ฅผ ํตํด ํธ์ถํ๋ฉด ํธ์ถํ ๋ ๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํธ์ถํ๋ค.
๋์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ์ธ์คํด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ฑฐ๋, ์๋ก ์์ฑํ ์ธ์คํด์ค๋ฅผ ์บ์ฑํ์ฌ ์ฌํ์ฉํ๋ ์์ผ๋ก ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ ์ ์๋ค!!
์ด๋ฐ์์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ public ์ด ์๋ private๋ก ์ ์ธํด์ ํด๋์ค ๋ฐ์์ Settings() ์์ฑ์๋ฅผ ํธ์ถํ ์ ์๊ฒ ํ๊ณ , ํด๋์ค ์์์๋ง ํธ์ถํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ getInstnace()๋ผ๋ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ด ๋๊ณ , ๋ ์ด์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํธ์ถํ ์ ์๋๋ก ํด์ ๋ถํ์ํ ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ์ง ์์๋ ๋๊ฒ ํ ์ ์๋ค.
-> ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ด์ ํธ์ถํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ํ์ ์ธ ์๋ก Boolean.valueof(boolean) ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ์์ ์์ฑํ์ง ์๋๋ค.
๋ฐ๋ผ์ ์์ฑ ๋น์ฉ์ด ํฐ ๊ฐ์ฒด๊ฐ ์์ฃผ ์์ฒญ๋๋ ์ํฉ์ด๋ผ๋ฉด ์ฑ๋ฅ์ ์๋นํ ๋์ด์ฌ๋ ค ์ค ์ ์๋ค.
ํ๋ผ์ด์จ์ดํธ ํจํด flyWeight pattern๋ ๋น์ทํ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ฐ๋ณต๋๋ ์์ฒญ์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ์์ผ๋ก ์ ์ ํฉํฐ๋ฆฌ ๋ฐฉ์์ ํด๋์ค๋ ์ธ์ ์ด๋ ์ธ์คํด์ค๋ฅผ ์ด์ ์๊ฒ ํ ์ง๋ฅผ ์ฒ ์ ํ ํต์ ํ ์ ์๋ค.
-> ์ด๋ฐ ํด๋์ค๋ฅผ ์ธ์คํด์ค ํต์ ํด๋์ค๋ผ๊ณ ํ๋ค.
โ ์ธ์คํด์ค๋ฅผ ํต์ ํ๋ ์ด์
์ธ์คํด์ค๋ฅผ ํต์ ํ๋ฉด ํด๋์ค๋ฅผ ์ฑ๊ธํค์ผ๋ก ๋ง๋ค์๋ ์๊ณ , ์ธ์คํด์คํ ๋ถ๊ฐ๋ก ๋ง๋ค์๋ ์๋ค.
๋ํ ๋ถ๋ณ ๊ฐ ํด๋์ค์์ ๋์น์ธ ์ธ์คํด์ค๊ฐ ๋จ ํ๋๋ฟ์์ ๋ณด์ฅํ ์ ์๋ค. (a == b์ธ ๊ฒฝ์ฐ์๋ง a.equls(b) ์ฑ๋ฆฝ)
์ธ์คํด์ค ํต์ ๋ flyWeight pattern์ ๊ทผ๊ฐ์ด ๋๋ฉฐ, ์ด๊ฑฐํ์ ์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ๋ง๋ค์ด์ง์ ๋ณด์ฅํ๋ค.
3๏ธโฃ ๋ฐํ ํ์ ์ ํ์ ํ์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ ๋ฅ๋ ฅ์ด ์๋ค.
4๏ธโฃ ์ ๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋งค๋ฒ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ ์ด๋ฐ์์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ๋ฐํ ํ์ ์ ํ์ ํ์ ๊ฐ์ฒด๋ก ๋ฐํํ ์ ์๋ค.
-> ๋ฐํํ ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์๊ฒ ํ๋ ์ ์ฐ์ฑ ์ ๊ณต
๋ฐํ ํ์ ์ ํ์ ํ์ ์ด๊ธฐ๋ง ํ๋ฉด ์ด๋ค ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ์๊ด์์ด ์ ๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค.
API๋ฅผ ๋ง๋ค ๋ ์ด๋ฌํ ์ ์ฐ์ฑ์ ์์ฉํ๋ฉด ๊ตฌํ ํด๋์ค๋ฅผ ๊ณต๊ฐํ์ง ์๊ณ ๋ ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์ด API๋ฅผ ์๊ฒ ์ ์งํ ์ ์๋ค.
์๋ฐ 8 ์ด์ ์๋ ์ธํฐํ์ด์ค์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์๋๋ฐ ์๋ฐ 8๋ถํฐ๋ ์ธํฐํ์ด์ค๊ฐ ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ์ ํ์ด ํ๋ ธ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์คํ ๋ถ๊ฐ ๋๋ฐ ํด๋์ค๋ฅผ ๋ ์ด์ ๊ฐ ๋ณ๋ก ์์ด์ก๋ค.
(์๋ฐ8 ์ด์ ์๋ ์ธํธํ์ด์ค์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ผ๋๊น ์ด๋ฆ์ด Type์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๋ ์ ์ ๋ฉ์๋๊ฐ ํ์ํ๋ฉด, Types๋ผ๋ ์ธ์คํด์คํ ๋ถ๊ฐ์ธ ๋๋ฐ ํด๋์ค๋ฅผ ๋ง๋คใ ๊ทธ ์์ ์ ์ํ๋ ๊ฒ์ด ๊ด๋ก์๋ค.)
- > ์ด์ pubic ์ ์ ๋ฉค๋ฒ๋ค ์๋น์๋ฅผ ๊ทธ๋ฅ ์ธํฐํ์ด์ค ์์ฒด์ ๋๋ฉด ๋๋ ๊ฒ์ด๋ค!
5๏ธโฃ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ์์ ์๋ ๋ฐํํ ๊ฐ์ฒด์ ํด๋์ค๊ฐ ์กด์ฌํ์ง ์์๋ ๋๋ค.
์ด ๋ค์ฏ๋ฒ์งธ ์ฅ์ ์ด ์ฝ์ผ๋ฉด์ ๊ฐ์ฅ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ด์๋๊ฒ ๊ฐ๋ค..
์ญ์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ํ๋๊น ํจ์ฌ ์ดํด๊ฐ ๋ง์ด ๋๋ ๋ถ๋ถ์ด๋ค.
์ด๋ ๊ฒ ์ธํฐํ์ด์ค๋ง ๋ง๋ค๊ณ ๊ตฌํ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ,
์ฌ์ฉํ ๋ ServiceLoader๋ผ๋ ์๋น์ค ์ ๊ณต์๋ฅผ ํ์ฉํด์ hello() ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
๋ฌผ๋ก ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ HelloService๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ์์ด์ผ ํ๋ค.
(๊ท์ฐฎ์์ ์ด ๊ณผ์ ์ ํจ์ค)
์ด๋ ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๊ตฌํ์ฒด์ ์์กดํ์ง ์๋๋ค๋ ์ ์ด๋ค!
๊ฐ๋ฐ์๋ ๊ตฌํ์ฒด๊ฐ ์ด๋ค๊ฒ์ด ์ฌ์ง ๋ชจ๋ฅด๋๋ผ๋ ์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ์ ์ฐํจ์ ์ค๋ค.
-> ์ด๋ฌํ ์ ์ฐํจ์ ์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ๋ฅผ ๋ง๋๋ ๊ทผ๊ฐ์ด ๋๋ค.
ex) JDBC (๊ทผ๋ฐ JDBC๋ ์๋ฐ 6์ ์ ๋ฑ์ฅํ ๊ฐ๋ ์ด๋ผ ServiceLoader๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.)
- ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋จ์
1๏ธโฃ ์์์ ํ๋ ค๋ฉด public์ด๋ protected ์์ฑ์๊ฐ ํ์ํ๋ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ง ์ ๊ณตํ๋ฉด ํ์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
ํด๋์ค์์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ , ์์ฑ์๋ฅผ private๋ก ๋ง์๋จ๋ค๋ฉด ์์์ ํ๊ธฐ ์ํด์๋ public ๋๋ protected ์์ฑ์๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์์์ ํ ์ ์๋ค.
-> ์ปฌ๋ ์ ํ๋ ์ ์ํฌ์ ์ ํธ๋ฆฌํฐ ๊ตฌํ ํด๋์ค๋ค๋ ์์ํ ์ ์๋ค๋ ์๊ธฐ๋ค.
Settings๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ฉด ์คํ๋ ค ๋จ์ ์ด ์๋ ์ฅ์ ์ผ๋ก ๋ฐ์๋ค์ผ ์๋ ์๋ค.
2๏ธโฃ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฐพ๊ธฐ ์ด๋ ต๋ค.
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ์์ฑ์์ฒ๋ผ API ์ค๋ช ์ด๋ ์๋ฐ doc์์ ์ค๋ช ์ด ๋ช ํํ๊ฒ ๋๋ฌ๋์ง ์์ผ๋ ์ฌ์ฉ์๋ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ๋ฐฉ์ ํด๋์ค๋ฅผ ์ธ์คํด์คํ ํ๋ ๋ฐฉ๋ฒ์ ์๊ธฐ ์ด๋ ต๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ฉ์๋ ์ด๋ฆ์ ๋๋ฆฌ ์๋ ค์ง ๊ท์ฝ์ ๋ฐ๋ผ ์ง๋ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ํํด์ค์ผ ํ๋ค!
์ด๋ค ๋ฉ์๋ ์ด๋ฆ์ธ์ง ์์๋ด๊ธฐ ์ด๋ ค์ฐ๋๊น ์๋ ค์ง ์ด๋ฆ getInstance, newInstance ์ด๋ฐ์์ผ๋ก ํด์ ์ ์ถํ ์ ์๋๋ก ํด์ผํ๋ค.
from : ๋งค๊ฐ๋ณ์๋ฅผ ํ๋ ๋ฐ์์ ํด๋น ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ํ๋ณํ ๋ฉ์๋
Date d = Date.from(instant);
of : ์ฌ๋ฌ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ ์ ํฉํ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ์ง๊ณ ๋ฉ์๋ฃ
Set<Rank> prime = Enumset.of(JACK, QUEEN, KING);
valueOf() : from ๊ณผ of ์ ์ข ๋ ์์ธํ ๋ฒ์
BigInteger.valueOf(Integer.MAX_VALUE);
instance ํน์ getInstance : (๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค๋ฉด) ๋งค๊ฐ๋ณ์๋ก ๋ช ์ํ ์ธ์คํด์ค๋ฅผ ๋ฐํํ์ง๋ง, ๊ฐ์ ์ธ์คํด์ค ์์ ๋ณด์ฅํ์ง๋ ์๋๋ค.
StackWalker luke = StackWalker.getInstance(options);
create ํน์ newInstance : instance ํน์ getInstance์ ๊ฐ์ผ๋ ๋งต๋จผ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋ฐํํจ์ ๋ณด์ฅํ๋ค.
Object newArray = Array.newInstance(cassObject, arrayLen);
getType : getInstance ์ ๊ฐ์ผ๋, ์์ฑํ ํด๋์ค๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ด๋ค.
FileStore fs = Files.getFileStore(path);
newType: newInstance์ ๊ฐ์ผ๋, ์์ฑํ ํด๋์ค๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ด๋ค.
BufferedReader br = Files.newBufferedReader(path);
type : getType๊ณผ newType ์ ๊ฐ๊ฒฐํ ๋ฒ์
List<Complaint> litany = Collections.list(legacyLitany);
โญ๏ธ ์ ๋ฆฌ
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ pulic ์์ฑ์๋ ๊ฐ์์ ์ฐ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ธ ์ฅ๋จ์ ์ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ผ๊ณ ํ์ง๋ง ์ ์ ํฉํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์์ผ๋ก public ์์ฑ์๋ฅผ ๋ฌด์์ ์ ๊ณตํ๋ ์ต๊ด์ด ์๋ค๋ฉด ๊ณ ์น๋ ๊ฒ์ด ์ข๊ฒ ๋ค~~