Week 4
: ์ ์ ์์ด ์ง๋๊ฐ ํ ์ฃผ
โ๏ธ ๋ฒ์จ F-Lab์ ์์ํ์ง 4์ฃผ์ฐจ๊ฐ ๋์๋ค.
4์ฃผ์ฐจ๋ผ๋ฉด ์ด๋ค ์๋ฏธ๋ก ์ค์ํ ์ฃผ์ธ๋ฐ, ๋๋ ๊ทธ ์ค์ํ ํ ์ฃผ๋ฅผ ์ผ๊ทผ์ผ๋ก ๋๋ถ๋ถ์ ๋ณด๋๋ค.
๊ทธ๋ฌํ ์ด์ ๋ก ๊ณํ์ 2/5๋ ํด๋ด์ง ๋ชปํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ ๋ง ๋ง์ด ์์ฌ์ด ํ ์ฃผ๋ค.
๊ทธ๋งํผ ํ์ตํ ๋ด์ฉ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ฉํ ๋ง ์ด๋ฐ์๋ ๋๋ถ๋ถ ๊ฟ ๋จน์ ๋ฒ์ด๋ฆฌ๊ฐ ๋์์ง๋ง, ๊ทธ๋๋ ๋ฉํ ๋ง ํ๋ฐ์ ๋ณต์ต ์ฐจ์์ผ๋ก ์์ ์ ํ์ตํ ๋ด์ฉ์ ๋ํด ์ง๋ฌธ ์ฃผ์ จ์ ๋ ๋๋ฆ๋๋ก ์ ๋ฆฌํด์ ๋ต๋ณ ํ ์ ์์๋ ์ ์ ์ข์ ์ํ์ด๋ผ๊ณ ์๊ฐํ๋ค!
1. ArrayList
Java Collection Framework์ ์ํ๋ฉฐ, List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ด๋ค.
ArrayList ํด๋์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด์ ๋ด๋๋ฐ, ๊ฐ ๊ณต๊ฐ์ ์ธ๋ฑ์ค๊ฐ ๋ถ์ฌ๋์ด ์ธ๋ฑ์ค ๊ฐ์ ์๊ณ ์๋ค๋ฉด ํน์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํ ๊ฐ๋ฅํ๋ค. ๋๋ฌธ์ ArrayList๋ ๋ฐ์ดํฐ ์กฐํ์ ์์ด ๋ฐฐ์ด์ ๋ค๋ฅธ ๊ณต๊ฐ์ ์ํํ์ง ์๊ณ ์๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๊ธฐ์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ArrayList๋ก ๊ฐ์ฒด๋ฅผ ์ ์ธํ ๋, ์์ฑ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ง์ ํด์ฃผ์ง ์๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธธ์ด 10์ ๋ฐฐ์ด์ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ์ ์ธ๋๋ค.
๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝ ํ ์ ์๋ค.
ํ์ง๋ง ArrayList๋ ๊ธธ์ด๋ฅผ ์ด๊ณผํด๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ํ ์ ์๋๋ฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ท ๋ฐ์ดํฐ์ ํจ๊ป ์๋ก์ด ๋ฐฐ์ด์ ์ถ๊ฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๋กญ๊ฒ ํ ๋นํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ฐธ์กฐ๋ฅผ ๋๊ณ ์๋ก์ด ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ค. ์ด๋ก์จ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ์ฐธ์กฐ๊ฐ ๋๊ธฐ๊ธฐ ๋๋ฌธ์ GC์ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์์ ์ ๋ฆฌ๋๋ค.
์ด ๋, ์๋ก์ด ๋ฐฐ์ด ๊ธธ์ด๊ฐ ๊ธฐ์กด์ ๋ฐฐ์ด ๊ธธ์ด + 1 ๋ก ์ง์ ๋์ด ์์ฑ๋๋ฉด add() ๋ฉ์๋๋ฅผ ํธ์ถํ ํ ๋๋ง๋ค ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ๋ฒ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋๋ ค์ผ ํ ๋, ์๋กญ๊ฒ ๋ง๋ค์ด์ง๋ ๋ฐฐ์ด์ ๊ธฐ์กด ๋ฐฐ์ด๋ณด๋ค ํจ์ฌ ํฐ ์ฌ์ด์ฆ๋ก ์์ฑ๋๋ค. ์ฆ, ๊ธฐ์กด ๊ธธ์ด + (๊ธฐ์กด ๊ธธ์ด / 2) ๋งํผ์ ๋ฐฐ์ด์ด ์์ฑ๋๊ณ , ์ด ๋ ์์ฑ๋ ๊ธธ์ด๋งํผ ๋ฐ์ดํฐ๊ฐ ์ฑ์์ง๋ค๋ฉด ์์์ ์ํํ ๋ก์ง๋๋ก ๊ธธ์ด๊ฐ ๋ ๊ธด ๋ฐฐ์ด์ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ ๊ท ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ฃ์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ ์ถ๊ฐ ๋ฟ๋ง ์๋๋ผ ์์ ๊ณผ ์ญ์ ๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
์กฐํ์ ๋ํด์๋ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ์์ , ์ญ์ ํ ๊ฒฝ์ฐ ํด๋น ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ์, ๋ค์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํํ์ฌ ์๋ก์ด ๋ฐฐ์ด์ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
2. LinkedList
Java Collection Framework์ ์ํ๋ฉฐ, List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ํด๋์ค์ด๋ค.
LinkedList๋ ๋ฐฐ์ด์ด ์๋ ๋ ธ๋์ ์ฐ๊ฒฐ๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ๋จ๋ฐฉํฅ์ ๊ฒฝ์ฐ์๋ Next ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ, ์๋ฐฉํฅ์ ๊ฒฝ์ฐ Head ๋ ธ๋์๋ Next ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์, Tail ๋ ธ๋์๋ Prev ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์, ๊ทธ ์ฌ์ด์ ์กด์ฌํ๋ ๋ ธ๋๋ค์ Next, Prev ๋ ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฌํ ๊ตฌ์กฐ ๋๋ถ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉฐ, ์ถ๊ฐ, ์์ , ์ญ์ ์๋ ArrayList ๋ณด๋ค๋ ๋น ๋ฅด๊ฒ ์ํ ํ ์ ์์ง๋ง, ์กฐํ์ ์์ด์๋ ํ์ ํ ๋๋ฆฐ ์๋๋ฅผ ๋ณด์ฌ์ค๋ค.
์กฐํ์ ๊ฒฝ์ฐ Head ๋ ธ๋๋ถํฐ ์ํํ์ฌ ํด๋น ๋ ธ๋์ ์กด์ฌํ๋ Next ๋ ธ๋์ ์ฃผ์๋ก ์ด๋ํ๊ณ ์ด๋ํ ๋ ธ๋์์ ๋ค์ Next ๋ ธ๋์ ์ฃผ์๋ก ์ด๋ํ๋ ๋ก์ง์ ์ด์ฉํด ์กฐํํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ๋ ธ๋ ์ด์ ์ ์กด์ฌํ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ , ์ญ์ ํ ๊ฒฝ์ฐ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋ ์ด์ ์ด๋ ๋ง์ง๋ง ๋ ธ๋ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์ํํด์ผ ํ ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ค๊ฐ ์์น์ ์ถ๊ฐ, ์์ , ์ญ์ ๋ฅผ ์งํ ํ ๊ฒฝ์ฐ์๋ ํด๋น ๋ ธ๋์ ์์น๊น์ง ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ค๋ง ArrayList์ ๋ฌ๋ฆฌ ์์ ๊ฐ์ ํ๋์ ์ํ ํ ๋, ํ๊ฒ์ด ๋ ๋ ธ๋์ ๋ฐ์ดํฐ์ ๋ํ ํ๋๋ง ์ํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฒ๋ ค์ง๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ArrayList ๋ณด๋ค ์ ๋ค.
3. static ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋๋ ๊ฒฝ์ฐ
static ์ ์ด์๊ฐ ์ ์ธ๋ ๊ฐ์ฒด์ ๊ทธ์ ์ํ ๋ฉ์๋, ํ๋๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ํ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ๊น์ง ๋ฉ๋ชจ๋ฆฌ์์ ์ ๋ฆฌ๋์ง ์๋๋ค.
์ ํ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์์ ์ฐ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๋ง์ด ํ ๋น ํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์์ด ๋ฐ์ ํ ์ ์๋ค.
4. Reverse Data
Queue ์๋ฃ๊ตฌ์กฐ์ 1,2,3,4,5 ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฌ๋์ด ์๊ณ , ์ด๋ฅผ ์ญ์์ผ๋ก ๋ค์ง์ด์ ๋ค์ Queue์ ๋ด๋ ๋ฐฉ๋ฒ ์ค ํ๋๋?
โก๏ธ Queue๋ ์ ์ ์ ์ถ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ 5 ๋ถํฐ ๋์ค๊ฒ ๋๋ค.
์ด ๋, ๋์ค๋ ๋ฐ์ดํฐ๋ค์ Stack์ ๋ด๋๋ค. Stack์ ์ ์ ํ์ถ์ ๊ตฌ์กฐ๋ก 5๊ฐ ๊ฐ์ฅ ๋ง์ง๋ง์, 1์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฒ ๋๋ค. ์ด๋ฅผ ๋ค์ Queue์ ์์๋๋ก ๋ด์ผ๋ฉด 5,4,3,2,1 ์์ผ๋ก ๋ด์ ์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํ ๋ด์ฉ๋ค
๐ฅ LRU ์บ์์ ์ด์์ฒด์ , ํ์ด์ง ์๊ณ ๋ฆฌ์ฆ -> ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋ ์ฌ๋ฌ ์ข ๋ฅ์ ์บ์์ ๋ํด์
๐ฅ Lombok์ด ์ค์ํ ์ด์ -> ์ด๋ ธํ ์ด์ ์ ์ํด ์ปดํ์ผ ํ์์์ ์์ค์ฝ๋์ ๊ฐ์ญ์ด ์ผ์ด๋๋๋ฐ ์ด๋ป๊ฒ ๊ฐ๋ฅํ์ง
๐ฅ ์ปดํ์ผ ํ์์ ๊ฐ์ : Annotation Processing / ๋ฐํ์์ ๊ฐ์ : Reflection -> Reflection์ ๋ํด์
๐ Big5 ํ๊ธฐ๋ฒ์ ๋ํด์
๐ Vector์ HashTable ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ์ ๋ํด์
๐ Deep Copy(๊น์ ๋ณต์ฌ), Shallow Copy(์์ ๋ณต์ฌ)
๐ญ ์ด๋ฒ ์ฃผ๋ ์ด๋ฐ์ ๋ฐ ์ฌ์ ์ผ๋ก ์ ๋ฒ ์๊ฐ์ ๊ณผ์ (?)๋ก ๋ด์ฃผ์ จ๋ ๋ด์ฉ๋ค์ ์ ๋๋ก ๊ณต๋ถํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ํด๋น ์ง๋ฌธ๋ค์ ๋ฐ์ ๋๋ ์ด๊ธด์ฅ๋ ์ํ๋ก ์ด๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๊ฑฐ๋ ๋ต๋ณ์ ํ์ง ๋ชปํ๋ ์ ์ด ์กฐ๊ธ ์์ฌ์ ์ง๋ง, ๋ชฐ๋๊ธฐ ๋๋ฌธ์ ์๋กญ๊ฒ ์์๊ฐ๋ ๊ฒ๋ค์ด ์์๊ณ , ๋ณต์ต์ ์๊ฐ์ ์กฐ๊ธ ๊ฐ์ง๋ฉด์ ๋ด๊ฐ ๊ณต๋ถํ ๋ด์ฉ์ ์กฐ๊ธ์ฉ ์ ๋ฆฌํ ์ ์์๋ ๋ฉํ ๋ง ์๊ฐ์ด์๋ ๊ฒ ๊ฐ๋ค.
๋ค์ ์ฃผ๋ถํฐ ์๋ก์ด ํ ์ฃผ์ ์์์ธ๋ฐ, ๋์น๋ ๊ฒ ์์ด ์ฌ๋ฐ๊ฒ ๊ณต๋ถํ๊ณ ๋ด ๊ฒ์ผ๋ก ๋ง๋ค ์ ์๋ ํ ์ฃผ, ํ ๋ฌ์ ์์์ด ๋ ์ ์๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค!