Week 3
: ํ๋ฉด ํ ์๋ก ์ด๋ ค์ด ๊ฒ
โ๏ธ ์ด๋ฒ ์ฃผ๋ ์ฑ ์ ํตํด ์๋กญ๊ฒ ๊ณต๋ถํ๊ธฐ๋ณด๋จ 2์ฃผ์ฐจ์์ ๋ฉํ ๋๊ป์ ์ง๋ฌธ ์ฃผ์ จ๋ ๋ด์ฉ์ ๋ํด ์กฐ๊ธ ๋ ๊น๊ฒ ๊ณต๋ถํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฌธ์ด ๋ ๋ค.
'๊ณผ์ฐ ๋ด๊ฐ ๊ณต๋ถํ ๊ฒ๋ค์ด ๋ด ๊ฒ์ด ๋์์๊น?'
์ค์ค๋ก์๊ฒ ๋ฌผ์์ ๋, ๋ฐ์ ๋ง๊ณ ๋ฐ์ ํ๋ฆฐ ๊ฒ ๊ฐ๋ค.
ํ๋ ธ๋ค์ ์๋ฏธ๋ ์๋ก์ด ๊ฒ์ ์ ํด์ ์กฐ๊ธ์ฉ ๋จธ๋ฆฌ์ ๊ทธ๋ ค์ง๊ธฐ ์์ํ ๋จ๊ณ๋ผ๋ ์๋ฏธ์ด๋ค.
์ผ๋ง๋ ๋ ๋ค์ฌ๋ด์ผ ๋ด ๊ฒ์ด ๋ ์ ์์๊น?!๐ฅฒ ์กฐ๊ธํด์ง์ง๋ง๊ณ ๋จ๋จํ๊ฒ ์ฑ์ฅ ํ ์ ์๋๋ก, 4์ฃผ์ฐจ๋ ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๋ค!
1. String ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ์ฐจ์ด
String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
๐ Literal๋ก ์ง์ ๋ฌธ์์ด์ ์์ฑํ์ฌ ์์ฑํ๋ ๋ฐฉ๋ฒ
๐ new ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ์์ฑ์์ ๋งค๊ฐ ๋ณ์๋ก ๋ฌธ์์ด์ ๋ด์ ์์ฑํ๋ ๋ฐฉ๋ฒ
1. ๋ฆฌํฐ๋ด๋ก ์์ฑ
๋ฆฌํฐ๋ด๋ก String ๊ฐ์ฒด๋ก ์ ์ธ ํ ๋, ์ปดํ์ผ๋ฌ์ ์ํด ์๋์ผ๋ก intern() ๋ฉ์๋๊ฐ ์ปดํ์ผ๋ ๋ ์ถ๊ฐ๋๋ค.
๋๋ฌธ์ JVM์์ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ํ ๋, intern() ๋ฉ์๋์ ๊ฐ์ ๋ฌธ์์ด์ด ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋์ง Heap ๋ฉ๋ชจ๋ฆฌ์ String Constant Pool์ ํ์ธํ๋ค.
๋ง์ฝ ๊ฐ์ ๋ฌธ์์ด์ด ์ด๋ฏธ ํ ๋น๋์ด ์๋ค๋ฉด ํด๋น ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค. ํ์ง๋ง String Constant Pool๊ฐ์ ๋ฌธ์์ด์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฌธ์์ด์ ํด๋น ์์ญ์ ์๋ก ํ ๋น๋ฐ๊ณ ์ด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค.
์ด๋ฌํ ์ด์ ๋ก ๋ฆฌํฐ๋ด๋ก ์์ฑ๋ ๋ฌธ์์ด์ด ๊ฐ์ String ๊ฐ์ฒด๋ ๋๋ฑ๋น๊ต์ฐ์ฐ์๋ฅผ ํตํด ๋น๊ต์ฐ์ฐ ์, true๋ฅผ ๋ฆฌํดํ๋ค.
2. ์์ฑ์๋ฅผ ํตํด ์์ฑ
์์ฑ์๋ก String ๊ฐ์ฒด๋ฅผ ์ ์ธ ํ ๋, ๋ฆฌํฐ๋ด ์ ์ธ๊ณผ ๋ฌ๋ฆฌ ๋ฐ๋ก Heap ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค. ๋๋ฌธ์ ๊ฐ์ ๋ฌธ์์ด์ด๋ผ ํ ์ง๋ผ๋ ์์ฑ์๋ก ์ ์ธ๋ String ๊ฐ์ฒด, ๋ฆฌํฐ๋ด๋ก ์ ์ธ๋ String ๊ฐ์ฒด์ ๋๋ฑ๋น๊ต์ฐ์ฐ์๋ก ์ฐ์ฐ ์ false๋ฅผ ๋ฆฌํดํ๋ค.
๋ฌธ์์ด์ด ๊ฐ์๋ Heap ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ์์ญ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ๋๋ฌธ์ ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํด์๋ equlas() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค.
2. Inheritance, Composition
๐์์
์์์ extends ๋ผ๋ ์์ฝ์ด๋ฅผ ํตํด ์ต๋ 1๊ฐ์ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ์ ์๋ค.
๋ถ๋ชจ ํด๋์ค์์ public, protected ์ ์ด์๋ก ์ ์ํ ํ๋, ๋ฉ์๋ ๋ฑ์ @Override ๋ฅผ ํตํด ์ฌ์ ์ํ๊ฑฐ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์์์ ๋คํ์ฑ์ ํน์ง์ ๊ฐ์ง๋ฉฐ, SOLID ์์น ์ค ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ๊ธฐ๋ฐ์ ๋๊ณ ์๋ค. ๋๋ฌธ์ IS-A ๊ด๊ณ์ ํด๋์ค๋ค์ ์์์ ํตํด ๊ด๊ณ๋ฅผ ๋งบ์ด์ค ์ ์๋ค.
ํ์ง๋ง Java์ ์์์ ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ์ด๊ธ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ๋ํ์ ์ผ๋ก List์ Arrays.asList()๊ฐ ์๋ค.
Arrays ํด๋์ค๋ ArraysList ํด๋์ค์๋ ๋ณ๊ฐ๋ก, Arrays.asList() ์ ์ ๋ฉ์๋๋ ๋งค๊ฐ ๋ณ์๋ก ๋ฐฐ์ด์ ๋ฐ์ ๋ด๋ถ ๋ก์ง์ ์ํด List ํด๋์ค๋ก ๋ฐํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Arrays.asList() ์ ์ ๋ฉ์๋๋ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝ ํ ์ ์๋ ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก List ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ๋๋ฌธ์ add() ๋ฉ์๋๊ฐ ์ฌ์ ์ ๋์ด ์์ง ์๋ค.
๊ทธ๋์ ์ด๋ ๊ฒ Arrays.asList()๋ก ์ ์ธ๋ List ๊ฐ์ฒด์ add() ๋ฉ์๋ ํธ์ถ ์ ์์ธ๋ฅผ ๋ฐ์ํ๋ฉฐ, ์ด๋ ๋ฆฌ์ค์ฝํ ์นํ ๋ฒ์น๊ณผ ํ์ ๊ฐ๋ฐฉ ์์น ๊ทธ๋ฆฌ๊ณ ์บก์ ํ์ ์ด๊ธ๋๋ค.
๐๊ตฌ์ฑ
์ด๋ฌํ ์์์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ์ฑ์ด๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ๊ฒ ๋๋๋ฐ, ๊ตฌ์ฑ์ ํด๋์ค์ ํ๋์ ์ฐธ์กฐํ๊ณ ์ ํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ธํ์ฌ ํด๋น ํด๋์ค๋ฅผ ๊ฐ์ฒด๋ก ์ ์ธ ํ์ ๋ ํ๋์ ์ ์ธ๋ ํด๋์ค ๋ด๋ถ์ ๋ฉ์๋๋ค์ ์ฌ์ฉ ํ ์ ์๋ค.
์์๊ณผ ๋ฌ๋ฆฌ ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๋ฅผ ํ๋๋ก ์ ์ธ ํ ์ ์๊ณ , ์์์ฒ๋ผ ์ฌ์ฌ์ฉ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์กด์ฌํ๋ค.
3. GC์ ๋์ ์๋ฆฌ์ ๊ทธ ์ข ๋ฅ
๐ Garbage Collector?
Java ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ Heap ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๊ฐ์ฒด ์ค ์ธ๋ชจ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋ฉ๋ชจ๋ฆฌ ํ์ ์์ ์ ์ํํ๋ค.
๐ GC์ ๋์ ์๋ฆฌ
๊ธฐ๋ณธ์ ์ผ๋ก Heap ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๊ฐ์ฒด ์ค Reachable ๊ฐ์ฒด์ UnReachable ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ณ (Mark), Unreachable ๊ฐ์ฒด๊ฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค.(Sweep) ์ด๋ฌํ ๊ณผ์ ์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ Mark & Sweep ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ฉฐ, ์ฌ๋ฌ ์ํฉ์ ๋ฐ๋ผ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ฉ๋ GC๋ฅผ ์ํํ๋๋ฐ Serial GC, Parallel GC, Parallel Old GC, CMS GC, G1GC ๊ฐ ์กด์ฌํ๋ค.
๐ GC๋ฅผ ์ํํ๋ ์์ญ
GC๊ฐ ๊ด๋ฆฌํ๋ ์์ญ์ธ Heap ๋ฉ๋ชจ๋ฆฌ๋ Young / Old Generation์ผ๋ก ๋๋๋ฉฐ, Young ์์ญ์๋ ์๋กญ๊ฒ ํ ๋น๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๊ณ Old ์์ญ์๋ Young ์์ญ์์ ์ ๋ฆฌ๋์ง ์์ ๊ฐํ ์ฐธ์กฐ๊ฐ ์ผ์ด๋ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋ค.
Young ์์ญ์ ์ธ๋ถ์ ์ผ๋ก Eden, Survivor 1/2 ์์ญ์ผ๋ก ๋๋๋๋ฐ, Eden ์์ญ์ new ์์ฑ์๋ก ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ฉฐ GC ์ํ ํ ์ฐธ์กฐ๊ฐ ์กด์ฌํ๋ ๊ฐ์ฒด๋ Survivor ์์ญ ์ค ํ ๊ณณ์ผ๋ก ์ด๋ํ๋ค. ํด๋น ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ Survivor ์์ญ ์ค ํ ๊ณณ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค ์ฐฌ๋ค๋ฉด ๋น์ด์๋ ๋๋จธ์ง Survivor ์์ญ์ ์ฐธ์กฐ๊ฐ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ์ด๋ ์ํจ ํ, ๊ธฐ์กด์ ์ฑ์์ ธ ์๋ Survivor ์์ญ์ ๋น์๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๊ณ์ ์ํํ๋ฉด์ Survivor ์์ญ์ ๋จ์์๋ ๊ฐ์ฒด ์ค age ๊ฐ์ด 8์์ 9๋ก ์ฆ๊ฐํ๋ ์์ ์ ํด๋น ๊ฐ์ฒด๋ค์ Old ์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ค.
๐ ๊ฐ๋ฐ์๊ฐ GC์ ๊ด์ฌํ๋ ๋ฐฉ๋ฒ
java.lang.ref ํจํค์ง์ ์กด์ฌํ๋ ํด๋์ค๋ฅผ ํธ์ถํด์ GC ์์ ์ํ์ ์ผ๋ถ๋ถ ๊ด์ฌ ํ ์ ์๋ค.
ํด๋น ํจํค์ง์๋ ๋ํ์ ์ผ๋ก WeakReference, SoftReference, PhantomReference, ReferenceQueue ํด๋์ค๊ฐ ์กด์ฌํ๋ค.
๊ฐ ํด๋์ค๋ GC์ ์ํด ๋ฉ๋ชจ๋ฆฌ ํ์๊ฐ ๋๋ฉด ์๋๋ ๊ฐ์ฒด๋ค์ ์์ฑ์์ ๋งค๊ฐ ๋ณ์๋ก ๋ด์ ์ ์ธํ๋ค. ์์ธ์ ์ผ๋ก PhantomReference๋ ReferenceQueue ๊ฐ์ฒด๋ ํจ๊ป ์ธ์๋ก ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
์ด๋ค ํด๋์ค๋ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ์ ๊ฐ์ฒด๋ฅผ ์บก์ ํํ๊ณ , ํด๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฐธ์กฐํ๋ค. ์ด ๋, ์บก์ํ ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ Reference ๊ฐ์ฒด๋ง ์กด์ฌํ ๋, GC๋ ํด๋น ๊ฐ์ฒด๋ฅผ UnReachable ๊ฐ์ฒด๋ก ๊ฐ์ฃผํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ์ ์์ ์ ์ํํ๋ค.
ํ์ง๋ง ๊ฐ Reference ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋จ์ ์๊ธฐ ๋๋ฌธ์, get() ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ์ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ํ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ์ ์๊ฒ ํ๋ค. ๋ค๋ง, SoftReference ํด๋์ค๋ ์บก์ํ ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ๋ฑ ์ํฉ์ ๋ง์ ๋ ํด๋น ์์ ์ ์ํํ๋ค.
4. Inner Class
๐ Inner Class?
ํด๋์ค ๋ด๋ถ์ ์ ์ธํ ํด๋์ค๋ก Static Nested ํด๋์ค์ ๋ด๋ถ ํด๋์ค๋ก ๋๋๋ค. ๋ด๋ถ ํด๋์ค๋ ๋ ์ง์ญ ๋ด๋ถ ํด๋์ค์ ์ต๋ช ํด๋์ค๋ก ๋๋๋ค. ๋ด๋ถ ํด๋์ค๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ๊ธฐ ์ํด์ ์ฌ์ฉ๋๊ฑฐ๋ ์บก์ํ๋ฅผ ํตํด ๊ตฌํ๋์ด์ผ ํ ๋ ์ฌ์ฉ๋๋ค.
์ด์ ๊ฐ์ ์ด์ ๋ก ๋ด๋ถ ํด๋์ค๋ ์บก์ ํ์ ํน์ง์ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ํด๋์ค ๋ด๋ถ๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ์๋ํ๋๋ฐ ์ ์ฉํ๋ฉฐ, ์ฃผ๋ก Java GUI์์ ์ฌ์ฉ๋๋ค.
๐ Static Nested Inner Class
ํด๋์ค ๋ด๋ถ์ ๊ตฌํ๋ ํด๋์ค์ static ์์ฝ์ด๋ฅผ ๋ถ์ฌ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ด๋ถ ํด๋์ค์ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ตฌํํ ํด๋์ค ๊ด๊ณ๋ฅผ ๋ฌถ์ด์ค๋ค.
๐ Anonymous Class
ํด๋น ํด๋์ค๋ฅผ ๊ฐ์ฒด๋ก ์ ์ธํ๊ธฐ ์ํด์๋ ์์ฑ์ ํน์ ๋ฉ์๋ ๋ด๋ถ์์ ์์ฑ์๋ฅผ ํธ์ถํ๊ณ , ์ด ๋ ์ค๊ดํธ๋ฅผ ๋ง๋ค์ด ๊ทธ ๋ด๋ถ์ ํด๋น ํด๋์ค๋ฅผ ์ ์ํ์ฌ ๊ตฌํํ๋ค. ์ต๋ช ํด๋์ค๋ ๋ฐํ์ ์, JVM์ด ์ฝ์ด์ผ ํ๋ ํด๋์ค ํ์ผ์ด ์ค์ด ์คํ ์๋๊ฐ ํฅ์๋ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋จ๋ฐ ํ ๊ฒฝ์ฐ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
5. Anntation
๐ Annotation?
ํด๋์ค, ๋ฉ์๋, ํ๋ ๋ฑ์ ์์ @๋ฅผ ์ฌ์ฉํด์ ์ ์ธํ๋ ๋ฐฉ์์ผ๋ก ํน์ ์๋ฏธ๋ฅผ ๋ช ์ํ๊ฑฐ๋ ๋ก์ง ์ธ์ ์์ ์ ์ํํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค. Java์์ ๊ธฐ๋ณธ ์ ๊ณตํ๋ Annotation์ผ๋ก๋ @Override, @Deprecated, @SupressWarning์ด ์กด์ฌํ๋ฉฐ ๊ฐ Annotation์ ์๋ฏธ๋ ๋ถ๋ชจ ํด๋์ค์์ ์ ์๋ ๋ฉ์๋ ๋ฐ ์์ฑ์๋ฅผ ์์ ํด๋์ค์์ ์ฌ์ ์ ํ ๋, ํด๋น ๋ฉ์๋ ํน์ ์์ฑ์๋ฅผ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ์ถํ์ ์ ๊ฑฐ๋ ์ ์๋ค๋ ์๋ฏธ๋ฅผ ์๋ ค์ค ๋, ๋ฐํ์ ์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
๐ Meta Annotaion?
Annotation์ ๋ง๋ค๊ธฐ ์ํด ์กด์ฌํ๋ Annotation์ผ๋ก, @Target, @Retention, @Documented, @Inherited ๊ฐ ์กด์ฌํ๋ค.
์์๋๋ก ์ด๋ค ๋ถ๋ถ์ ์ ์ฉ ๊ฐ๋ฅํ์ง, ์ด๋ค ์์ ์์ Annotation์ด ์ํ๋๋์ง, ํด๋น Annotation์ Java API ๋ฌธ์์ ๋ฑ๋กํ ๊ฒ์ธ์ง, ํด๋น Annotation์ด ์ ์ธ๋ ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค์๋ ์ ์ฉ์ํฌ ๊ฒ์ธ์ง๋ก ๊ตฌ๋ถ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ๋ค
๐ Interface, Proxy, Proxy Pattern, Spring Proxy(AOP) (Transactional)
๐ Annotation ๋์ ์๋ฆฌ์ Rombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ด๋ป๊ฒ ๋์ํ๋์ง
๐ Lamda๋ ์ด๋ป๊ฒ ๋์ํ๋์ง
๐ LRU Cache์ ๋ํด์
๐ ArrayList, LinkedList ๊ตฌํ์ฒด์ ์ฐจ์ด์ (์๋ฃ๊ตฌ์กฐ์ ๋ํ ๊ณต๋ถ)
๐ญ ์ค๋ ๋ฉํ ๋๊ป ๋๋ฃจ๋ญ์คํ๊ฒ ๋งํ๋ ๊ฒ์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ์ง์ง ์ ํํ ์ง์ด์ฃผ์ จ๋ค.
๋ด๊ฐ ์ ํํ ์์ง ๋ชปํ ๋, ๋ด๊ฐ ์ ๋ฆฌ๊ฐ ์๋ ๋ด์ฉ๋ค์ ํนํ๋ ํก์ค์์คํ๋ฉด์ ๋ ผ์ ์์ ๋ฒ์ด๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค.
์ด๋ ๋ฉด์ ๋ฟ๋ง ์๋๋ผ ์ปค๋ฎค๋์ผ์ด์ ์๋ ํฐ ๋ฌธ์ ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋งํ๊ธฐ ์ ์ ์๊ฐํ์!