Data Structure
๐งฉ [Data Structure] ์๋ฃ๊ตฌ์กฐ์ ์ถ์๋ฐ์ดํฐ ํ์
1๏ธโฃ ์ถ์.
-
โ์ถ์์ ๋ ๋ฒจ์ด ๋๋คโ
- ์ฌ๊ณ ์ ์์ค์ด ๋๋ค๋ผ๋ ๋ป
-
โ์ถ์์ ์ ์โ
- ๊ด์ ์ด ๊ณ์ธตํ๋์ด ์์นํ ๊ฒ.
- ํ์์ ๊ฐ๋
๋ค์ ๊ฒฐํฉํ์ฌ ์์์ ๊ณ ๊ธ ๊ฐ๋
์ ๋ง๋ค์ด๋๊ฐ๋ ์ง์ ๋ฐ์ ์ ๋จ๊ณ.
- ๊ณ์ธต์์ ๋จ๊ณ๊ฐ ๋์ผ๋ฉด ์ถ์์ ๋ ๋ฒจ์ด ๋์ ๊ฒ์ด๋ค.
- ์ถ์์ ์ญ์ฌ
- ์ธ๊ฐ์ ์ฌ๊ณ ๊ฐ ์งํํด์จ ๊ณผ์ ์์ฒด.
- ์์์ ์ด๊ณ ๋ฎ์ ๊ด์ ์ด ๊ณ์ธตํ๋ฅผ ๊ฑฐ์น๋ฉด์ ์ ์ ์ฐจ์์ด ๋์์ ธ ์ด.
- ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ํด๋์ค
- ํ๋ก์ ํธ๋ ๋ฌธ์ ํด๊ฒฐ๊ณผ์ ์์๋ ์๋ก์ด ์๋ฏธ ๋จ์๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ณ์ธตํํ๋ ์์
์ด ๋ฐ๋ณต๋จ.
- ํด๋์ค๊ฐ ๋ํ์ ์.
- ๋ชจ๋(Module)
- ์๋ฏธ์ ๋จ์.
- ํต์์ ์ผ๋ก ๋ชจ๋์ ๋จผ์ ์ถ์์ ์ธ ๋ ๋ฒจ์์ ์ค๊ณ๋๊ณ , ํ์ ๊ตฌ์ฒดํ๋๋ค.
- ๋ชจ๋์ ์ถ์ํ(Abstraction)ํ๋ค๋ ๊ฒ.
- ์ธ๋ถ ์ฌํญ์ ์๋ตํ๊ณ ๊ฐ์ฅ ์คํจํ ๊ธฐ๋ฅ๋ง ๋๋ฌ๋ด๋ ๊ฒ.
- ์ถ์ํ๋ โ์์์-์๋๋กโ ์ด๋ฃจ์ด์ง ์๋ ์๊ณ , โ์๋์์-์๋กโ ์ด๋ฃจ์ด์ง ์๋ ์๋ค.
- ํฐ ๊ทธ๋ฆผ์ ๋จผ์ ๊ทธ๋ฆฌ๊ณ ์ ์ฐจ ์์ ๋ชจ๋๋ก ๋๋์ด๊ฐ๋ ๊ณผ์ ์ โ์์์-์๋๋กโ ๋ฐฉ์.
- ์ตํ๋ถ ๋จ์๋ค์ ์ค๋นํ๊ณ ๊ฑฐ๊ธฐ์๋ถํฐ ์ ํ๊ณผ ์กฐํฉ, ์๋ก์์ ๊ฐ๋ฏธํ์ฌ ์์ ํค๋ฒจ์ ๊ทธ๋ฆผ์ ๋ง๋ค์ด๋ด๋ ๊ณผ์ ์ โ์๋์์-์๋กโ ๋ฐฉ์.
- ์ผ์์์ ์ ํ๋ ์ถ์์ ์ด ๋ ๋ฐฉ์์ด ํผ์ฌํจ.
2๏ธโฃ ์ถ์ ๋ฐ์ดํฐ ํ์: ADT
- ์๋ฐ์ 8๊ฐ์ง ๊ธฐ์ด ๋ฐ์ดํฐ ํ์
- byte
- ์ ์ ํ์
(1๋ฐ์ดํธ)
- short
- ์ ์ ํ์
(2๋ฐ์ดํธ)
- int
- ์ ์ ํ์
(4๋ฐ์ดํธ)
- long
- ์ ์ ํ์
(8๋ฐ์ดํธ)
- float
- ์ค์ ํ์
(4๋ฐ์ดํธ)
- double
- ์ค์ ํ์
(8๋ฐ์ดํธ)
- boolean
- true
- false
- ๋
ผ๋ฆฌํ์
(1๋นํธ true or false)
- char
- ๋ฌธ์ ํ์
(2๋ฐ์ดํธ)
- ๊ธฐ์ด ๋ฐ์ดํฐ์
์ด ์๋ ๋ฐ์ดํฐ ํ์
์๋ ๋๋ถ๋ถ ์ถ์์ ์ฑ๊ฒฉ์ด ์๋ค.
- ์ด๋ค ์ฑ์ง์ ๊ณต์ ํ๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ ํ๋์ ๋ฐ์ดํฐ ํ์
์ ์ด๋ฃจ๊ธฐ ์ข์ ํ๋ณด๋ค.
- ์ถ์ ๋ฐ์ดํฐ ํ์
(ADT, Abstract Data Type)
- ์ธ๋ถ ์ฌํญ์์ ๋ฒ์ด๋ ์ถ์์ ์ผ๋ก ์ ์ํ ๋ฐ์ดํฐ ํ์
.
- ์ฆ, ์ด๋ค ๋ฐ์ดํฐ ํ์
์ด ์ด๋ค ์์
์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง๋ง ํํํ ๊ฒ์ด๋ค.
- ์๋ฅผ ๋ค์ด ์์๊ฐ ์์๋ฅผ ๊ฐ๊ณ ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ์ธ ๋ฆฌ์คํธ๋ ์๋ ๊ทธ๋ฆผ์ (a)์ ๊ฐ์ด ํํ ๊ฐ๋ฅ.
- ๋๋ ๋ฆฌ์คํธ๊ฐ ์ง์ํ๋ ์์
์(b)์ ๊ฐ์ด ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋์ดํด ํํ ๊ฐ๋ฅ.
- โ์ถ์์ ์ผ๋ก ํํํ๋คโ
- ์๋ฃ๊ตฌ์กฐ์์๋ ์ด๋ฐ ์์ผ๋ก ์ด๋ค ๋์์ด ์ง์ํ๋ โ์์
์ ๋์ดํด ํํโํ๋ ๊ฒ์ โ์ถ์์ ์ผ๋ก ํํํ๋คโ๋ผ๊ณ ํ๋ค.
- ๋์์ ๊ทธ๋ ๊ฒ ํํํ ๊ฒ์ ์ถ์ ๋ฐ์ดํฐ ํ์
์ด๋ผ ํ๋ค.
- ์ด๋ ๋์์ด ํฌํจํ๋ ๋ฐ์ดํฐ ์์ฑ์ ์ ํ์ด ์์ผ๋ฉด ๋ฐ์ดํฐ์ ์์ฑ์ ๊ฐ์ด ์์ ํด๋ ์ข๋ค.
- ์ ๊ทธ๋ฆผ์ (a)์์ 3๊ฐ์ ์์
์ ์ง์ํ๋ ์์์ ๊ฐ์ฒด๋ ์ถ์ ๋ฐ์ดํฐ ํ์
(ADT) โ๋ฆฌ์คํธโ์ ์ํ๋ค.
- ๋ฌ๋ฆฌ ํํํ๋ฉด, ADT ๋ฆฌ์คํธ๋ผ๋ ๋ฐ์ดํฐ ํ์
์ ์ํ๋ ๊ฐ์ฒด๋ ์ด 3๊ฐ์ ์์
์ ์ง์ํ๋ค.
- ์๋ฐ์์ 8๊ฐ์ง ๊ธฐ์ด ๋ฐ์ดํฐ ํ์
์ ์ ์ธํ ๋๋จธ์ง๋ ์ถ์ ๋ฐ์ดํฐ ํ์
์ด๋ค.
- ์ถ์ ๋ฐ์ดํฐ ํ์
์ ๋๋ต ํ๋์ ํด๋์ค์ ๋์๋๋ค.
- ํด๋์ค๋ ์์ ์ ๊ท์น์ ๋ฐ๋ฅด๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ์ด๋ค.
- ํด๋์ค๋ (์๋ฌต์ ์ผ๋ก) ๊ทธ๋ฐ ๊ฐ์ฒด๋ค์ ์งํฉ์ ์๋ฏธํ๊ธฐ๋ ํด์ ํ๋์ ๋ฐ์ดํฐ ํ์
์ด๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
- ํ๋์ ADT ์๋์ ์ฌ๋ฌ ADT๊ฐ ํฌํจ๋ ์๋ ์๋ค.
- ์๋ฐ์์ ํด๋์ค์ ์์ ๊ฐ๋
์ธ ์ธํฐํ์ด์ค(Interface) ๊ธฐ๋ฅ์ด ADT์ ๊ฐ์ฅ ์ ๋์๋๋ ๊ฐ๋
์ด๋ค.
- ADT๋ ์ด๋ค ๋ฐ์ดํฐ ํ์
์ด ์ด๋ค ์์
์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง๋ฅผ ์ธ๋ถ ์ฌํญ ์์ด ํํํ๋ค.
- ์ด๋ ์๋ ๊ทธ๋ฆผ์ (a)์ฒ๋ผ ํต์ฌ ์์
๋ง์ผ๋ก ํํํ ์๋ ์๊ณ , (b)์ฒ๋ผ ๋ค๋ฅธ ์์
์ ๋ํด ํํํ ์๋ ์๋ค.
- (a)์ฒ๋ผ ์ต์ํ์ผ๋ก ํํํด๋์ผ๋ฉด ๋๊ฐ ๊ตฌํํ ๋ ํ์ํ ์์
์ ๋ ํ๋ค.
- ADT ๋ฆฌ์คํธ๋ โ์ ์ด๋ ์ด ์์
๋ค์ ํฌํจํด์ผ ํ๋คโ๋ ๋ป์ด๋ค.
- ์ ์์๋ฅผ ๋ฆฌ์คํธ์ ์ฒซ์๋ฆฌ์ ๋ฃ๊ฑฐ๋ ๋์ ๋ถ์ด๋ ๊ฒ์ โi๋ฒ์งธ ์๋ฆฌ์ ์ ์์ ๋ฃ๊ธฐโ๋ก ํตํฉํ ์ ์๋ค.
- ๊ทธ๋๋ ์ฒซ์๋ฆฌ๋ ๋์๋ฆฌ์ ์ ์์๋ฅผ ๋ฃ๋ ์์
์ด ์์ฃผ ํํ๋ฉด ๋ฐ๋ก ํํํ ์๋ ์๋ค.
- ์ด์ฒ๋ผ ํน์ ๋์์ ๋ํ ADT๋ ์ ๋์ ์ด๋ค.
- ์ด๋ฐ ๋ฉด์์ ADT๋ ์ ๊ณตํ๋ ์ฌ๋์ ์ฃผ๊ด์ ๊ด์ ์ด ๋ฐ์๋๋ค.
- ADT๋ ํ๋ก๊ทธ๋๋ฐ ์์
์ ํจ์จ์ ์ด๊ณ ๊ณ ๊ธ์ค๋ฝ๊ฒ ํ ์ ์๋๋ก ๋๊ธฐ ์ํ ๊ฒ์ด๋ค.
- ADT๋ก ํํํ๋ ๊ฒ์ด ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ๊ฐ ๋์ด์๋ ์ ๋๋ค.
- ADT๋ก ์์ํจ์ผ๋ก์จ ์๋ฃ๊ตฌ์กฐ ๋ด๋ถ์ ์ธ์ธํ ์ฌํญ์ ์ ๊ฒฝ์ ์ฐ์ง ์๊ณ ์์ํ ์ ์๋ค.
- ์ฆ, ์๋ฃ๊ตฌ์กฐ์ ์ ์ ์ ์ด๋ฃจ๋ ํจ์๋ค์ ์ธ๋ถ ์ฌํญ์ ์ง์ฐฉํ์ง ์๊ณ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ๋ ์ผ๋ง ์๊ฐํ๋ฉฐ ์์
ํ ์ ์๋ค.
- ์ด๋ก ์ธํด ํ์
๋ ์ํํด์ง๋ค.
- ์ด๋ค ํด๋์ค ๋๋ ํด๋์ค์ ์ง๋จ์ด ADT๋ ADT์ ์คํ ๋งํผ ์ ํํ๋์ด ์์ผ๋ฉด, ์ฌ์ฉ์๋ ๊ทธ ๋ด๋ถ์ ์ธ๋ถ ๊ตฌํ์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ โ์ด์ฉโํ ์ ์๋ค.
- ์ฆ, ADT๋ ๋ด๋ถ์์ ์์
์ โ์ด๋ป๊ฒโํ๋์ง ์ ๊ฒฝ ์ฐ์ง ์๊ฒ ํ๋ฉฐ โ๋ฌด์์โ ํ๋์ง๋ง ์ ๊ฒฝ ์ฐ๊ฒ ํด์ค๋ค.
- ํนํ ์ฌ๋ ค ๋ช
์ด ์งํํ๋ ํ๋ก์ ํธ์์ ์ด ๊ฐ์ ๊ฐ๋
์ ์ถ์ํ๋ฅผ ํตํ ์ธํฐํ์ด์ค๊ฐ ๋งค์ฐ ์ ์ฉํ๋ค.
3๏ธโฃ ์ถ์ ๋ฐ์ดํฐ ํ์
๊ณผ ์๋ฐ ์ธํฐํ์ด์ค.
- ์ธํฐํ์ด์ค(Interface)
- ์๋ฐ์์ ADT์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ธฐ๋ฅ
- ์๋ฅผ ๋ค์ด ์๋ ๊ทธ๋ฆผ์ (a)์ ๊ฐ์ ADT โ๋ฆฌ์คํธโ๋ฅผ (b)์ ๊ฐ์ด ์ธํฐํ์ด์ค ๊ธฐ๋ฅ์ ์ด์ฉํด ์ ์ํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ฉด ListInterface๋ ์ด๋ฆ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅด๋ ๋ชจ๋ ํด๋์ค๋ ์ฌ๊ธฐ ๋์ด๋ 3๊ฐ์ ์์
์ ์ ๊ณตํ๊ณ , ๊ฐ ์์
์ ๋ฆฌํด ํ์
๊ณผ ํ๋ผ๋ฏธํฐ์ ์์ ํ์
๋ ์ด ์ ์๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค.
- ๋ฐ๋ผ์ (c)์ ๊ฐ์ด implements๋ฅผ ์ฌ์ฉํด ์ด ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅด๋ ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ํด๋์ค LinkedList๋ ListInterface ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ ์ 3๊ฐ์ ๋ฉ์๋๋ฅผ ์ง์ํ๊ณ , ๋ฆฌํด ํ์
๊ณผ ๊ฐ ํจ์์ ํ๋ผ๋ฏธํฐ ์์ ํ์
๋ ๋ฐ๋ผ์ผ ํ๋ค.
- ๊ทธ๋ฌ๋ฉด (d)์ ๊ฐ์ด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์์๋ ์ด ์ธํฐํ์ด์ค๋ง ๋ณด๊ณ 1.LinkedList ๊ฐ์ฒด๋ฅผ ํ๋ ํ ๋น๋ฐ์ ๋ค์ 2.ListInterface์์ ๋ช
์๋ ํ๋ผ๋ฏธํฐ ์์ ํ์
์ ๋ง๊ฒ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ์
์ฅ์์๋ ๋ฆฌ์คํธ์ ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๊ตฌํ๋์ด ์๋์ง ์ ํ์ ์์ด โ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ ์์ x๋ฅผ ์ฝ์
ํ๋ผโ, โ3๋ฒ์งธ ์์๋ฅผ ์ญ์ ํ๋ผโ์ ๊ฐ์ ์ถ์์ ์์ค์์ ๋ฆฌ์คํธ๋ฅผ ์ทจ๊ธํ ์ ์๋ค.
- ๊ฒฐ๊ตญ ์ถ์ ๋ฐ์ดํฐ ํ์
์ด ํด๋น ํ์
์ ๊ฐ์ฒด๋ฅผ โ์ถ์์ ์ธ ์์ค์์โ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.
- ๊ท๋ชจ๊ฐ ํฐ ํ๋ก์ ํธ๋ผ๋ฉด ๋ง์ ADT๋ก ๊ตฌ์ฑ๋ ํ
๋ฐ, ๊ธฐ์กด ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ๋ ํ๊ณ ์๋ก ๋ง๋ค๊ธฐ๋ ํ๋ค.
- ์๋ ๊ทธ๋ฆผ์ ์ด ๊ฒฝ์ฐ์ ํด๋นํ๋ ADT์ ๊ดํ ์
๋ฌด ๋ถ๋ด ๊ตฌ์กฐ์ ์๋ค.
- ํ์ฅ์ด ADT๋ฅผ ์ค๊ณํ๊ฑฐ๋ ๊ฒฐ์ ํ๋ฉด ํ์์ด ๊ทธ์ ๋ถ์ํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์คํ ์์ค๋ฅผ ๊ฐ์ ธ๋ค ์ด๋ค.
- ADT์ ๊ท์ฝ๋ง ๋ถ๋ช
ํ๋ฉด ๊ตฌํ ํ๋ก๊ทธ๋๋จธ๊ณผ ์ฌ์ฉ ํ๋ก๊ทธ๋๋จธ๋ ์ด ๋ฐ์ดํฐ ํ์
์ ๊ดํด ์ถ๊ฐ๋ก ์ํตํ ํ์๊ฐ ์๋ค.