๋น ๋ฅธ ์์ฝ
์ด ํ์์์๋ ๋ฆฌ์คํธ, ๋ฒกํฐ, ์คํ, ๋๊ธฐ์ด ๋ฐ ์ธํธ๋ฅผ ํฌํจํ Java ์ปฌ๋ ์
์ ๋ค์ํ ์ธก๋ฉด์ ๋ค๋ฃจ์์ผ๋ฉฐ ๊ตฌํ๊ณผ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ๋ฐ๋ชจ๋ฅผ ์งํํ์ต๋๋ค. ๊ฐ์ฌ๋ ๋๊ธฐํ๋ ์ปฌ๋ ์
๊ณผ ๋น๋๊ธฐํ๋ ์ปฌ๋ ์
๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฐจ์ด์ ๊ณผ ๋ค์ํ ์์
์์์ ํจ์จ์ฑ์ ์ค๋ช
ํ์ต๋๋ค. ๋ํ ํ์์์๋ ์์ฑ์ ๋ฐ ์์๊ณผ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
๋ฟ๋ง ์๋๋ผ ๋ค๊ฐ์ค๋ ๊ณผ์ ํ๊ฐ ๋ฐ ๋ง๊ฐ์ผ์ ๋ํด ์ธ๊ธํ์ต๋๋ค.
โข
ํ๊ฐ์ผ์ ํด๋น ๊ณผ๋ชฉ ๋ง์ง๋ง ์์
์ผ
โข
ํ๊ฐ ์ ์ถ ๋ง๊ฐ์ผ์ ํ๊ฐ์ผ๋ก ๋ถํฐ ์ฝ ์ผ์ฃผ์ผ~10์ผ
์์ฝ
Java Collection Framework ๊ฐ๋ ์ ํ๊ตฌํฉ๋๋ค.
์ด ํ์๋ Java์ ์ปฌ๋ ์
ํ๋ ์์ํฌ ๊ฐ๋
์ ๊ฒํ ํ๊ณ ์ฐ์ตํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ๊ฐ์ฌ๋ ๋ชฉ๋ก, ๋ฒกํฐ ๋ฐ ํด์ ์ธํธ๋ฅผ ํฌํจํ ์ปฌ๋ ์
์ ๋ํด ๋ ์์ธํ ์ดํด๋ณผ ๊ฒ์ด๋ผ๊ณ ์ธ๊ธํฉ๋๋ค. ๊ทธ๋ค์ ๋ชฉ๋ก๋ถํฐ ์์ํ์ฌ ์ด๋ฌํ ๊ฐ๋
์ ํ๋์ฉ ์ฐ์ตํ ๊ณํ์
๋๋ค. ๊ฐ์ฌ๋ ๋ํ ์ด์ ์ธ์
์์ ๋ค๋ฃฌ ๊ฒ ์ธ์๋ ์ปฌ๋ ์
ํ๋ ์์ํฌ์ ๋ค๋ฅธ ์ธก๋ฉด๋ค์ ํ๊ตฌํ ๊ฒ์ด๋ผ๊ณ ์ธ๊ธํฉ๋๋ค.
Java ๋ฒกํฐ ๋ฐ ๋ฐฐ์ด ๋ชฉ๋ก
ํ ๋ก ์ Java ์ปฌ๋ ์
์ ๋ฒกํฐ์ ๋ฐฐ์ด ๋ชฉ๋ก์ ์ด์ ์ ๋ง์ถฅ๋๋ค. ๋ฐํ์๋ ๋ฒกํฐ๊ฐ ๋๊ธฐํ๋๊ณ ์ค๋ ๋ ์์ ํ์ง๋ง ๋ฐฐ์ด ๋ชฉ๋ก์ ๊ทธ๋ ์ง ์๋ค๊ณ ์ค๋ช
ํฉ๋๋ค. ๋ ๊ฐ์ง ๋ชจ๋ ์ด๊ธฐ ์ฉ๋์ด 10์ธ ๋ด๋ถ ๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๋ ์ฐจ๋ฉด ๋ ๋ฐฐ๋ก ์ฆ๊ฐํฉ๋๋ค. ๋ฐํ์๋ ์ด๋ฌํ ์ปฌ๋ ์
์์ ์์๋ฅผ ์์ฑ, ์ถ๊ฐ, ์ ๊ฑฐ ๋ฐ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ํ ์์๋ฅผ ๋ฐ๋ณตํ๊ณ ๊ธฐ์กด ์ปฌ๋ ์
์์ ์๋ก์ด ์ปฌ๋ ์
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ฐํ์๋ ๋ฒกํฐ์ ๋ฐฐ์ด ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ ํ์ ๋ชฉ๋ก์ ์ค์ฉ์ ์ธ ์์ ๋ฅผ ๋ง๋ค์ด ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ์ฌ์ ๊ณผ ์ฐจ์ด์ ์ ์ค๋ช
ํฉ๋๋ค.
๊ด๋ จ ์๋ ์ฃผ์ ์์ ํผ๋์ค๋ฌ์ด ๋ํ
๋ํ๋ ๋ถ๋ฆฌ๋์ด ์๊ณ ๋ช
ํํ ๋งฅ๋ฝ์ด๋ ์ฃผ์ ๊ฐ ๋ถ์กฑํด ๋ณด์
๋๋ค. GalaxyBook, MacBook, ์ผํ ์นดํธ์ ๊ฐ์ ๋ค์ํ ํญ๋ชฉ์ ๋ํ ์ธ๊ธ๋ฟ๋ง ์๋๋ผ ์์๊ณผ ๊ฐ๊ฒฉ์ ๋ํ ํ ๋ก ๋ ํฌํจ๋ฉ๋๋ค. ๋จ์ฑ ๊ฐ์ ๋ถ์ ๋ํ ์ธ๊ธ๋ ์์ง๋ง ๋งฅ๋ฝ์ ๋ถ๋ถ๋ช
ํฉ๋๋ค. ๋ํ๋ ์ผ๊ด๋ ์์ฌ๋ ๋ชฉ์ ์ด์๋ ๊ด๋ จ์๋ ์ง์ ๊ณผ ์ง๋ฌธ์ ํผํฉ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
Java์์ ์คํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํฉ๋๋ค.
ํ ๋ก ์ Java์์ ์คํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ณ ์ฌ์ฉํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ๊ฐ์ฌ๋ LIFO(Last-in-First-out) ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก์์ ์คํ ๊ฐ๋
์ ์ค๋ช
ํ๋ฉฐ, ํธ์, ํ, ํผํฌ์ ๊ฐ์ ๋์์ ๋ณด์ฌ์ค๋๋ค. ์ด ๊ฐ์ฌ๋ Java์ ๋ด์ฅ ์ปฌ๋ ์
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ฃผ๋ฉฐ ์ ๋ค๋ฆญ์ ์ฌ์ฉ์ ๊ฐ์กฐํฉ๋๋ค. ๊ฐ์ฌ๋ ๋ํ ์ฒ์๋ถํฐ ์คํ์ ๊ตฌํํ ๊ฐ๋ฅ์ฑ์ ์ธ๊ธํ์ง๋ง ํธ์๋ฅผ ์ํด ๊ธฐ์กด ์ปฌ๋ ์
์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค.
ํ์ด์ง ๋ฐฉ๋ฌธ์ ์ํ ์คํ ๊ตฌํ
ํ์์์ Aloha๋ ํ์ด์ง ๋ฐฉ๋ฌธ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ตฌํ์ ๋ํด ๋
ผ์ํ์ต๋๋ค. ๊ทธ๋ ํ์ฌ ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ์ถ์ ๋๊ณ "๋ค๋ก" ๋ฒํผ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช
ํ์ต๋๋ค. Aloha๋ ํ์ด์ง ๋ฐฉ๋ฌธ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๊ณผ ์คํ์ ์ฌ์ฉํ์ฌ ํ์ด์ง ๊ธฐ๋ก์ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๋ํ ์คํ์ ์ฌ์ฉํ์ฌ "๋ค๋ก"๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ์ฃผ์์ต๋๋ค. ํ์ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ๋ฌธ์ ์ ๋ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋
ผ์ํ์ต๋๋ค.
๋งํฌ๋ ๋ชฉ๋ก vs ๋ฐฐ์ด ํจ์จ์ฑ
๊ฐ์ฌ๋ ๋งํฌ ๋ฆฌ์คํธ์ ๊ฐ๋
์ ์ค๋ช
ํ๊ณ ๋ฐฐ์ด๊ณผ ๋น๊ตํ๋ฉฐ ๊ตฌ์กฐ์ ์ฅ์ ์ ์ค๋ช
ํฉ๋๋ค. ๊ทธ๋ ๋งํฌ ๋ฆฌ์คํธ๊ฐ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฐ ๋ ํจ์จ์ ์ด๋ฉฐ, ๋ฐฐ์ด์ด ํน์ ์์์ ์ก์ธ์คํ๋ ๋ฐ ๋ ๋น ๋ฅด๋ค๊ณ ๊ฐ์กฐํฉ๋๋ค. ๊ฐ์ฌ๋ ๋ํ ์ด์ค ๋งํฌ ๋ชฉ๋ก๊ณผ ๊ทธ ์์ ๊ฐ ์ด๋ ๊ฐ๋ฅ์ฑ์ ๋ํด ์ธ๊ธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค๊ฐ์ค๋ ํ๊ฐ์ ๋ง๊ฐ์ผ์ ๋ํด ๋
ผ์ํ๋ฉฐ, 3์ 31์ผ๊ฒฝ ์ ์ถ ๋ ์ง๋ฅผ ์ ์ํ๊ณ ์ต์ข
์ฌ์
๋ ฅ๊น์ง ์ผ์ฃผ์ผ์ด ์์๋ ๊ฒ์ ์๋ ค์ค๋๋ค. ๊ฐ์ฌ๋ ์ฝ์ค์ ์ด๋ ค์์ ๋ํ ์ฐ๋ ค๋ฅผ ํด๊ฒฐํ๊ณ ๋ฐ๋ผ ์ก๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๋ ์ฌ๋๋ค์์ํ ๊ฐํ ์ธ์
์ ์ ์ํจ์ผ๋ก์จ ๊ฒฐ๋ก ์ ๋ด๋ฆฝ๋๋ค.
Java LinkedList๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด์ ๊ตฌํํฉ๋๋ค.
๊ฐ์ฌ๋ Java์ LinkedList ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ค์ ๋๊ธฐ์ด์ด FIFO(First-In-First-Out) ์์น์ ๋ฐ๋ฅด๋ฉฐ ํธ์์ ์๋ฃ ๋์ฅ๊ณ ๋ ์นดํ ์ค๊ณผ ๋น๊ตํฉ๋๋ค. ๊ฐ์ฌ๋ 'offer' ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๊ณ 'poll' ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ํ 'peek' ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์ชฝ ์์๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋ ๋ณผ ์ ์๋ค๊ณ ์ธ๊ธํฉ๋๋ค.
๋๊ธฐ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ตฌํ
๋ฏธํ
์์ ALOHA๋ Queue ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ตฌํ์ ๋ํด ๋
ผ์ํ์ต๋๋ค. ๊ทธ๋ค์ ์์ฐจ์ ์ผ๋ก ๋๊ธฐ์ด์ ๋ง๋ค๊ณ ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์์ฐํ์ต๋๋ค. ALOHA๋ ๋ํ ๋๊ธฐ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฐ๋
๊ณผ ์ค์ ์๋๋ฆฌ์ค์์์ ์ ์ฉ์ ์ค๋ช
ํ์ต๋๋ค. ํ์ ์ฝ๋์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๊ฒช์๊ณ , ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๊ณ ๋๊ธฐ์ด ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋๋ก ํ์ฌ ํด๊ฒฐํ์ต๋๋ค. ๋ํ๋ HashSet ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ๊ฐ๋จํ ํ ๋ก ์ผ๋ก ๋๋ฌ์ต๋๋ค.
Java์ Constructors์ Set Properties๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ํ ๋ก ์ ๋ถ๋ชจ ๋ฐ ์์ ํด๋์ค์์ ์์ฑ์์ ๊ตฌํ๊ณผ Java ์ปฌ๋ ์
์ ์งํฉ ์์ฑ์ ์ค์ ์ ๋ก๋๋ค. ์ด ๊ทธ๋ฃน์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ปดํ์ผ๋ฌ์ ์ํด ์๋์ผ๋ก ์์ฑ๋๋ ๋ฐฉ๋ฒ๊ณผ super() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด
๋๋ค. ๋ํ ์ ๋ ฌ๋์ง ์์ ํน์ฑ๊ณผ ์ค๋ณต ์์๋ฅผ ํฌํจํ ์ ์๋ ๊ฒ ๋ฑ ์ธํธ์ ํน์ง์ ๋ํด ๋
ผ์ํฉ๋๋ค. ๋ํ์์๋ ์ธํธ๊ฐ ํด์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ์ฑ์ ๊ฒฐ์ ํ๊ณ ์ค๋ณต์ด ์ถ๊ฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃน๋๋ค.
HashSet ๋ฐ HashMap ๋ฐ์ดํฐ ๊ตฌ์กฐ
ํ ๋ก ์ ํ๋ก๊ทธ๋๋ฐ์์ HashSet๊ณผ HashMap ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. Aloha๋ HashSet์ด ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค๊ณ ์ค๋ช
ํ๊ณ ๋ณต๊ถ ๋ฒํธ ์์ฑ๊ธฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฐ ๋ค์ HashMap์ ์ค๋ช
ํฉ๋๋ค. HashMap์ ํค-๊ฐ ์์ ์ฌ์ฉํ๋ฉฐ, ํค๋ ๊ณ ์ ํ์ง๋ง ๊ฐ์ ์ค๋ณต๋ ์ ์์ต๋๋ค. Aloha๋ keySet, entrySet ๋ฐ Iterator ๋ฉ์๋๋ฅผ ํฌํจํ์ฌ HashMap์ ์์๋ฅผ ์ถ๊ฐํ๊ณ ๊ฒ์ํ๋ฉฐ ๋ฐ๋ณตํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.