๐ ์๋ฃ๊ตฌ์กฐ - ADT์ DS์ ์ฐจ์ด
ADT
์ถ์ ์๋ฃํ(Abstract Data Type)
์๋ฃ๊ตฌ์กฐ์ ํน์ง, ์์ฑ, ์ฐ์ฐ ๋ฑ์ผ๋ก ๋ฌด์์ ํ ์ ์๋์ง
๋ฐ์ดํฐ์ ๋ํ ํ์ ๊ณผ ํด๋น ํ์ ์ ์ํํ ์ ์๋ ์ฐ์ฐ๋ค๋ง์ ์ ์ํจ.
How์ ๋ํด์๋ ๋ค๋ฃจ์ง ์์ -> ๊ตฌํ์ ๋ํด์ ๋ค๋ฃจ์ง ์์
์ฌ๊ธฐ์ How๊น์ง ๋ค๋ฃฌ๋ค๋ฉด ์๋ฃ ๊ตฌ์กฐ(Data Structure)๊ฐ ๋จ.
์ ์์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ค๋ฉด ์ฌ์ฉ์๋ ๊ตณ์ด ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋์ง ๋ชฐ๋ผ๋ ์ฌ์ฉํ๋๋ฐ ๋ฌธ์ ์์.
์ฌ์ฉ์๋ ADT์์ ์ ์๋ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ๋๊ณ ๊ตฌํ์ ๊ฐ๋ฐ์๊ฐ ํ๋ค.
ADT ๋ชฉ์ : ์ถ์ํ๋ฅผ ํตํด ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ถ๋ฆฌ ์ํค๋๋ฐ ์ค์ -> ์ฌ์ฉ์๋ ๋ณต์กํ ๋ด๋ถ ๊ตฌํ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ์ธํฐํ์ด์ค๋ง์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
์ค๋ช
Stack
์ผ๋ก ์์๋ฅผ ๋ค๊ฒ ๋ค.
Stack
์ด ๋ฌด์์ธ์ง์ ๋ํด ์ง๋ฌธํ์ ๋?
๋ต๋ณ์ผ๋ก FILO(First In Last Out)
, ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋์ค์ ๋๊ฐ๊ณ ๋ฆ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ์ ์ผ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ๋ก ์ฐ์ฐ์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ push
, ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ pop
๋ฑ์ด ์๋ค. ์ด๋ ๊ฒ ์ค๋ช
ํ๋ค๋ฉด ์ด๊ฑด ADT
๋ฅผ ์ค๋ช
ํ ๊ฑฐ๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
์ฌ๊ธฐ์ ๊ตฌํ์ ๋ํ ์ค๋ช ์ ์๊ธฐ ๋๋ฌธ์!
Stack์ ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ๊ฐ? ์ ๋ค๋ฃฌ๋ค๋ฉด ์ด๊ฒ์ Data Structure
๊ฐ ๋๋ค.
Array ์ฌ์ฉ
Linked List ์ฌ์ฉ
- ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋ ์ง๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํจ.
DS ๋ชฉ์ : ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ. ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์.
Java๋ฅผ ์์๋ก ๋ค๋ฉด Interface๋ ADT, Interface๋ฅผ ๊ตฌํํ Class๋ DS๊ฐ์ ์๋ฏธ
์ธํฐํ์ด์ค๋ ๋ฉ์๋์ ์๊ทธ๋์ฒ(์ด๋ฆ, ๋งค๊ฐ๋ณ์, ๋ฐํ ํ์ )๋ฅผ ์ ์ํ์ง๋ง ์ด ๋ฉ์๋๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋ ์ง๋ ์ ์ํ์ง ์์.
ํด๋์ค๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ตฌํ์ ์ํ ์๋จ์ ์ ๊ณตํ๊ณ ๋ฐ์ดํฐ(ํ๋)์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ์ฐ์ฐ(๋ฉ์๋)์ ๋ฌถ์ด์ ํํํจ. ํด๋์ค๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ฒด๊ฐ ๋ ์ ์์ง๋ง ๋ชจ๋ ํด๋์ค๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ ์๋.
ADT์ DS์ ์ฐจ์ด์
ADT๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ ผ๋ฆฌ์ ํน์ฑ์ ์ ์ํ๋๋ฐ ์ด์ ์ ๋๊ณ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์จ๊ธฐ์ง๋ง DS๋ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋๋ ์ง์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ธ๋ถ ์ฌํญ์ ๋ค๋ฃฌ๋ค.
ADT๋ ์ธํฐํ์ด์ค์ ์ค์ ์ ๋๊ณ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ณ ๋ คํ์ง ์๋๋ค. DS๋ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง๋ฅผ ํฌํจํ๋ค.
ADT๋ ์ค๊ณ ์ ๋ฐ์ดํฐ์ ํ์ ๊ณผ ์ฐ์ฐ์ ๋ํ ๋ช ์ธ์ ์ง์คํ๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ ์ ํ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ ๋ฐฉ์์ผ๋ก ๊ณ ๋ คํ๋๋ฐ ์ฌ์ฉํ๋ค.
1
2
3
4
stack<Integer> stack = new Stack<>();
Stack<Integer> stack // ์คํ ADT์ ํ์
new Stack<>(); // ADT๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ DS
๊ฒฐ๋ก
ADT์ DS๋ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค. ADT๋ ์ด๋ค ๋ฐ์ดํฐ ํ์ ์ด ์ํํด์ผ ํ ์ฐ์ฐ์ ์ ์ํ๊ณ DS๋ ์ด๋ฌํ ADT๊ฐ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด๋ป๊ฒ ๊ตฌํ๋ ์ง๋ฅผ ์ ํ๋ค.
ADT๋ ๋ฌด์(What)์ ํ ๊ฒ์ธ์ง์ ๋ํด ์ ์ํ๊ณ DS๋ ์ด๋ป๊ฒ(How)ํ ๊ฒ์ธ์ง์ ๋ํด ์ ์ํจ.