๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] ์š”์ฆ˜ ๊ฐœ๋ฐœ์ž๋“ค์€ Vector๋ฅผ ์ƒ์†ํ•œ Stack์„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ์ฒ˜

ChatGPT


์š”์ฆ˜ ๊ฐœ๋ฐœ์ž๋“ค์€ Vector์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Stack๋„ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” Stack ํด๋ž˜์Šค๊ฐ€ Vector๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Vector์˜ ๋ฌธ์ œ์ ๋“ค์ด Stack์—์„œ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๋“ค์€ ๋” ๋‚˜์€ ๋Œ€์•ˆ๋“ค์„ ์„ ํ˜ธํ•œ๋‹ค.

 

Vector์™€ Stack์˜ ๋ฌธ์ œ์ 

1. ๋™๊ธฐํ™”๋œ ๋ฉ”์„œ๋“œ

Vector์™€ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ Stack์€ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“ค์ด ๋™๊ธฐํ™”(synchronized)๋˜์–ด ์žˆ๋‹ค. ๋™๊ธฐํ™”๋œ ๋ฉ”์†Œ๋“œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ์•ˆ์ „ํ•˜์ง€๋งŒ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•„์š”์— ๋”ฐ๋ผ ๋ช…์‹œ์ ์œผ๋กœ ๋™๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์žˆ๋‹ค.

2. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ

Vector์™€ Stack์€ ์ž๋ฐ” 1.0๋ถ€ํ„ฐ ์กด์žฌํ•ด ์˜จ ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šค๋“ค์ด๋‹ค. ์ž๋ฐ” 2์—์„œ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋„์ž…๋œ ์ดํ›„, ArrayList, LinkedList, Deque์™€ ๊ฐ™์€ ๋” ์œ ์—ฐํ•˜๊ณ  ํ˜„๋Œ€์ ์ธ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋“ค์€ Vector์™€ Stack ๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ƒˆ๋กœ์šด ์ž๋ฐ” ์ฝ”๋“œ์—์„œ๋„ ์„ ํ˜ธ๋œ๋‹ค.

3. ์ œ๋„ค๋ฆญ ํƒ€์ž… ์ง€์›

Vector์™€ Stack์€ ์ž๋ฐ” 1.5์—์„œ ์ œ๋„ค๋ฆญ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ์ง€๋งŒ, ์—ฌ์ „ํžˆ ์˜ค๋ž˜๋œ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋ฉ”์„œ๋“œ๋“ค์ด ๋‚จ์•„ ์žˆ์–ด, ์ƒˆ๋กœ์šด ์ œ๋„ค๋ฆญ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋“ค์— ๋น„ํ•ด ๋œ ์ง๊ด€์ ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Deque<E> ์ธํ„ฐํŽ˜์ด์Šค์™€ ArrayDeque<E> ํด๋ž˜์Šค๋Š” Stack์˜ ๊ธฐ๋Šฅ์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•˜๋ฉฐ, ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ์„ฑ๋Šฅ๋„ ์šฐ์ˆ˜ํ•˜๋‹ค.

  • Deque<E> ์ธํ„ฐํŽ˜์ด์Šค์™€ ArrayDeque<E> ํด๋ž˜์Šค๊ฐ€ Stack์˜ ๊ธฐ๋Šฅ์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•˜๊ณ , ๋ช…ํ™•ํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•œ ์ด์œ 
๋”๋ณด๊ธฐ

Deque<E> ์ธํ„ฐํŽ˜์ด์Šค์™€ ArrayDeque<E> ํด๋ž˜์Šค๊ฐ€ Stack์˜ ๊ธฐ๋Šฅ์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•˜๊ณ , ๋ช…ํ™•ํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•œ ์ด์œ 

 

1. ๋” ๋‚˜์€ API ์„ค๊ณ„

๋ช…ํ™•ํ•œ ๋ฉ”์„œ๋“œ ๋ช…์นญ

Deque ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํƒ๊ณผ ํ์˜ ๋‘ ๊ฐ€์ง€ ์šฉ๋„๋ฅผ ๋ชจ๋‘ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฉ”์†Œ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํƒ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” push(), pop() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” offer(), poll() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…ํ™•ํ•œ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

์–‘๋ฐฉํ–ฅ ์ ‘๊ทผ์„ฑ

Deque๋Š” ์–‘์ชฝ ๋์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์–‘๋ฐฉํ–ฅ ํ(Double-Ended Queue)๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ์ด ํŠน์„ฑ ๋•๋ถ„์— Deque๋Š” ํ์™€ ์Šคํƒ์˜ ๊ธฐ๋Šฅ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ˜๋ฉด, Stack์€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž‘๋™ใ…Žํ•˜๋ฉฐ, ๊ธฐ๋Šฅ์ ์œผ๋กœ ์ œํ•œ์ ์ด๋‹ค.

2. ์„ฑ๋Šฅ์ƒ์˜ ์ด์ 

๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ตฌํ˜„

Stack์€ Vector๋ฅผ ์ƒ์†๋ฐ›์•„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ๋™๊ธฐํ™”(synchronizedd)๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์•ˆ์ „ํ•˜์ง€๋งŒ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋™๊ธฐํ™”๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, ArrayDeque๋Š” ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—,๋™๊ธฐํ™” ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋™๊ธฐํ™”๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋” ๋‚˜์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

ArrayDeque๋Š” ๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ์š”์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ด๋ฉฐ, Stack์ด ์‚ฌ์šฉํ•˜๋Š” Vector์˜ ํ™•์žฅ ๋ฐฉ์‹(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ์‹)๋ณด๋‹ค ์œ ์—ฐํ•˜๋‹ค.

3. ๋” ํ˜„๋Œ€์ ์ธ ๋Œ€์ฒดํ’ˆ

์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ํ†ตํ•ฉ

ArrayDeque๋Š” ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ผ๋ถ€๋กœ, ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜๋“ค๊ณผ ํ•จ๊ป˜ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์ง€์›ํ•˜๋ฉฐ, ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Stack์€ ๋ ˆ๊ฑฐ์‹œ ํด๋ž˜์Šค๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

4. ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๋ช…ํ™•์„ฑ

๋ช…ํ™•ํ•œ ์—ญํ•  ๊ตฌ๋ถ„

ArrayDeque์™€ ๊ฐ™์€ Deque ๊ตฌํ˜„์ฒด๋Š” ์Šคํƒ๊ณผ ํ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉฐ, ์œ ์ง€๋ณด์ˆ˜์™€ ํ˜‘์—…์‹œ์—๋„ ๋” ํฐ ์žฅ์ ์„ ์ œ๊ณตํ•œ๋‹ค. Stack ์€ ๋‹จ์ผ ๊ธฐ๋Šฅ ํด๋ž˜์Šค์ด๋ฉฐ, ์ปฌ๋ ‰์…˜์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

 

 

ํ˜„๋Œ€์ ์ธ ๋Œ€์•ˆ

ArrayDeque<E>

ArrayDeque๋Š” Deque ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ, ์Šคํƒ๊ณผ ํ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. ArrayDeque๋Š” ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Stack๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์Šคํƒ ๊ตฌํ˜„์— ์ถ”์ฒœ๋œ๋‹ค.

LinkedList<E>

LinkedList๋Š” List์™€ Deque ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์Šคํƒ๊ณผ ํ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. LinkedList๋Š” ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•œ ์„ ํƒ์ด๋‹ค.