๐ ์๊ฐ
์ปดํจํฐ ๊ณผํ์์ ๋น ์ง ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์๊ฐํ๋ ค๊ณ ํ๋ค.
๊ฐ๋ฐ์ ํ๊ฒ ๋๋ฉด ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ด๋ฆฌํ๋ ๊ด์ ์์ ์๋ฃ๊ตฌ์กฐ๋ ์๋นํ ์ค์ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์ ์ง์ด๋ณด๊ณ , C์ธ์ด๋ก ๊ตฌํํด๋ณด๋ฉฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ตํ๋๊ฐ๋๋ก ํ์.
๐ ๋ชฉ์ฐจ
์ด 7๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์์๋ณผ ์ ์๋๋ก ๊ตฌ์ฑํ๋ค.
- ๋ฐฐ์ด(Array)
- ์คํ(Stack)
- ํ(Queue)
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked list)
- ํด์ ํ ์ด๋ธ(Hash table)
- ๊ทธ๋ํ(Graph)
- ํธ๋ฆฌ(Tree)
๐ฅ ์๊ณ ์์ด์ผ ํ๋ ๊ฒ
๐ฆ ์๋ฃํ (Data Type)
์๋ฃํ์ด๋, ์ปดํจํฐ ๊ณผํ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ค๋ฃจ๊ฒ ๋๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ๋ถํ๊ณ ๋ถ๋ฅํ๊ธฐ ์ํ ๊ฐ๋
์ด๋ค.
์ปดํจํฐ๋ ์ค์ ๋ก 0, 1 ๋ก ๊ตฌ์ฑ๋ ๊ฐ์ ๋ค๋ฃจ๋๋ฐ ์ด๋ฅผ ๊ตฌ๋ถํ๊ณ ๋ถ๋ฅํ๊ธฐ ์ํด ์๋ฃํ์ ์ฌ์ฉํ๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์๋์ ๊ฐ์ ๊ฐ์ด ํ ๋น๋์ด์๋ค๊ณ ๊ฐ์ ํ์.
00000000 00010010 11010000 00100100
์ด ๊ฐ์ ์ด๋ค ๊ฐ์ ๋ํ๋ด๋ ๊ฒ์ผ๊น?
์ฌ๊ธฐ์ ๋๋ตํ ์ ์๋ ์ฌ๋์ ์๋ฌด๋ ์์ ๊ฒ์ด๋ค.
๋จ์ํ 2์ง์ > 10์ง์๋ก ๋ณํํ์ฌ ํด์ํ ์๋ ์์ง๋ง, ์ปดํจํฐ๋ 0, 1๋ก๋ง ๊ฐ์ ํํํ๊ธฐ ๋๋ฌธ์, ์ฃ๋ถ๋ฆฌ 10์ง์๋ก ๋ณํํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์๋ค. (์ฆ, ์ด๋ค ํํ์ ๊ฐ์ ํํํ๊ณ ์ ํ๋์ง ์ ์ ์๋ค)
์์ํ๋ ๊ฒ์ฒ๋ผ 10์ง์ ์ ์ํ ๊ฐ์ ๋ํ๋ด๋์ง, ์๋๋ฉด ๋ฌธ์์ด ๊ฐ ์ผ๋ถ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ธ์ง ์ด๋ป๊ฒ ์ ๊ฒ์ธ๊ฐ?
์ค๋๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฃํ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ์๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ ๊ฐ์ ์๋ ์กฐ๊ฑด์ ๋ง๊ฒ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ฐ์ ํ ๋นํ๋ค๊ณ ํ์.
- ์ด ๊ฐ์ 4๋ฐ์ดํธ(32๋นํธ) ๊ณต๊ฐ์ ์ฐจ์งํด.
- ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์ ์ ์ํ ๊ฐ์ด์ผ.
C์ธ์ด ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด int ํํ์ ๊ฐ์์ ์ ์ถํ ์ ์์ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ int ๊ฐ ์๋ฃํ์ ํด๋นํ๋ค.
int ๋ผ๋ ์๋ฃํ๋ง ๋ณด๊ณ ๋ ๊ฐ์ ํํ(์ ์ํ ์ซ์)๋ฅผ ์ ์ ์๊ณ , ์ด ๊ฐ์ด ์ด๋ ์ ๋์ ๊ณต๊ฐ์ ์ฐจ์ง(4๋ฐ์ดํธ)ํ๋์ง ์ ์ ์๋ค.
์ด ์ธ์๋ ์ค์(float, double), ๋ฌธ์(char) ๋ฑ ์ฌ๋ฌ ํํ์ ๊ฐ์ด ์กด์ฌํ๋๋ฐ ์ด๋ฅผ ๊ตฌ๋ถํ๊ณ ๋ถ๋ฅํ๊ธฐ ์ํด ์๋ฃํ์ ์ฌ์ฉํ๋ค.
๐ ์ถ์ ์๋ฃํ (Abstract Data Type, ADT)
์ถ์ ์๋ฃํ์ ์ด๋ ํ ๋์์ ๊ธฐ๋ฅ๋ค์ ๋จ์ํ ๋์ด(์ ์)ํ ๊ฒ์ด๋ฉฐ, ๊ธฐ๋ฅ์ ๋ํ ์ธ๋ถ ๊ตฌํ์ฌํญ์ ๋ํ๋ด์ง ์๋๋ค.
์ถ์(Abstract)์ด๋ผ๋ ๋จ์ด๋ง ๋ค์ด๋ ์ด๋ฏธ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ถ ๋ ์๋ ๊ธฐ๋ถ์ด ๋๋๋ฐ, ๊ทธ ๋๋์ด ๋ ๋ค๋ฉด ์ ์์ด๋ค.
ํ ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด๋๋ก ํ๊ฒ ๋ค.
- ์ปคํผ๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐ๋ฆฌ์คํ A๊ฐ ์๋ค.
- ์ปคํผ๋ฅผ ๋ง์๊ณ ์ ํ๋ ์๋ B๊ฐ ์๋ค.
์๋ B๋ ์ปคํผ๋ฅผ ๋ง์๊ธฐ ์ํด ์นดํ๋ก ์ด๋ํ ํ ์๋ฉ๋ฆฌ์นด๋
ธ๋ฅผ ์ฃผ๋ฌธํ๋ค.
๋ฐ๋ฆฌ์คํ A๋ ์ฃผ๋ฌธ์ ๋ฐ๊ณ , ๋ณธ์ธ๋ง์ ๋
ธํ์ฐ๋ก ์ปคํผ๋ฅผ ๋ด๋ ค ์๋์๊ฒ ์ ๊ณตํ๋ค.
์ฌ๊ธฐ์ B๋ A๊ฐ ์ปคํผ๋ฅผ ์ด๋ป๊ฒ ๋ง๋๋์ง ๊ตฌ์ฒด์ ์ผ๋ก ์ ํ์๊ฐ ์๋ค.
๋จ์ง ์ปคํผ๋ฅผ ์ฃผ๋ฌธํ๊ณ , ๊ฒฐ๊ณผ๋ฌผ์ธ ์ปคํผ๋ฅผ ๋ฐ์์ ๋ณธ์ธ์ด ์ด๋ฃจ๊ณ ์ ํ๋ ๋ชฉ์ (์ปคํผ ๋ง์๊ธฐ)์ ๋ฌ์ฑํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ฆฌ์คํ A๋ฅผ ์ถ์ ์๋ฃํ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ด ์ ์ํ ์ ์์ ๊ฒ์ด๋ค.
A {
takeOrder();
makeCoffee();
}
์ ๋ง A๊ฐ ํ๋ ํ์(๊ธฐ๋ฅ)๊ฐ ๋์ด๋์ด ์๊ธฐ๋ง ํ ๋ฟ ์ธ๋ถ ๊ตฌํ์ฌํญ์ ๋ณด์ด์ง ์๋๋ค.
๋ณธ ์์๋ฅผ ์ถ์ ์๋ฃํ์ ์ ์์ ๋์
ํด๋ณด๋ฉด ์ด๋ ์ ๋ ๊ฐ๋ฅ์ด ์กํ ๊ฒ์ด๋ค.
์ด๋ ํ ๊ธฐ๋ฅ๋ค์ ๋์ด(์ฃผ๋ฌธ ๋ฐ๊ธฐ/์ปคํผ ์ ์กฐ)ํ ๊ฒ์ด๋ฉฐ, ์ธ๋ถ ๊ตฌํ ์ฌํญ์ ๋ํ๋ด์ง ์๋๋ค.
B์ ๊ด์ ์์ ๋ณด๋ฉด ๋ฉ๋ด ์ฃผ๋ฌธ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์๋์ง, ์ปคํผ๊ฐ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ ๋ง๋ค์ด์ง๋์ง ๊ถ๊ธํ์ง ์์ ๊ฒ์ ์ด์ฐ ๋ณด๋ฉด ๋น์ฐํด ๋ณด์ธ๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ฃ๊ตฌ์กฐ์ ์ถ์ ์๋ฃํ์ ๋ฌด์จ ๊ด๊ณ๊ฐ ์์๊น? ์ถ์ ์๋ฃํ์ ์ค๊ณ๋์ ๊ฐ๊ณ , ์๋ฃ๊ตฌ์กฐ๋ ์ด๋ฅผ ์ค์ ๋ก ๊ตฌํํ ํํ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์์ผ๋ก ์์๋ณผ ์คํ(Stack)์ ์๋ฃ๋ฅผ ๋ฃ๊ณ , ๋บ ์ ์๋ค.
์ถ์ ์๋ฃํ ๊ด์ ์ผ๋ก ๋ฐ๋ผ๋ณด๋ฉด ์๋ฃ๋ฅผ ๋ฃ๋ ๊ธฐ๋ฅ๊ณผ ๋บ ์ ์๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ฐ, ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
Stack {
push();
pop();
}
์ด๋ฌํ ์ถ์ ์๋ฃํ์ ๊ตฌํํ๊ฒ ๋๋ฉด ์๋ฃ๊ตฌ์กฐ๋ก์จ์ ์คํ์ด ๋๋ค. ์์ผ๋ก ๋ช ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ ๋ํด ๊ฐ๋ ์ ์ผ๋ก ๋จผ์ ์์๋ณด๊ณ , ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ์ตํ๋ณด๋๋ก ํ์.