Post

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - ADT์™€ DS์˜ ์ฐจ์ด

๐Ÿ’š ์ž๋ฃŒ๊ตฌ์กฐ - 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๊ฐ€ ๋œ๋‹ค.

  1. Array ์‚ฌ์šฉ

  2. 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)ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์ •์˜ํ•จ.

This post is licensed under CC BY 4.0 by the author.