๋ง ๋ฒํผ (Ring Buffer)
https://chronicle.software/ring-buffer/
๋ง ๋ฒํผ๋ FIFO queue ์ฒ๋ฆฌ๋ฅผ ์ํ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ค. circular buffer๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ ๊ฐ๋ก ์์๋ ์ ๋ค๋ค์ง์ง ์๋๋ฐ, ์์ฉ์ ํญ์ด ๊ฝค ๋์ด์ ์์๋๋ฉด ์ข๋ค.
๊ธฐ๋ณธ ์๋ฆฌ
์ด๊ฑด ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
๊ณ ์ ๋ ํฌ๊ธฐ์ ์ ์ ๋ฐฐ์ด์ธ์ง, ํฌ๊ธฐ๊ฐ ๋์ด๋๋ ๋์ ๋ฐฐ์ด์ธ์ง๋ ๊ตฌํ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
๊ตฌ์ฑ์์๋ ๊ฐ๋จํ ํธ์ด๋ค.
๋ฐฐ์ด ํ์ค๊ณผ, ์์ ๊ฐ๋ฆฌํค๋ start ์ธ๋ฑ์ค, ๋์ ๊ฐ๋ฆฌํค๋ end ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑ๋๋ค.
๊ธฐ๋ณธ ๋์ ์๋ฆฌ๋ ๊ฐ๋จํ ํธ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋๋ start ์ธ๋ฑ์ค ์์น์์ ์์๋ฅผ ๊บผ๋ด๊ณ start๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ ๋๋ end ์ค๋ฅธ์ชฝ์ ์์๋ฅผ ์ง์ด๋ฃ๊ณ end๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
๊ทธ๋ผ start๊ฐ ์ค๋ฅธ์ชฝ ๋์ ๋์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ฌ์ค ๊ทธ๋๋ ๋ฌธ์ ๋ ์๋ค.
๋ฐฐ์ด ์์ฒด๋ ์ง์ ์ด์ง๋ง ๋
ผ๋ฆฌ์ ์ผ๋ก๋ ์ํ์ด๊ธฐ ๋๋ฌธ์, ๋ ์ธ๋ฑ์ค ๋ค์์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ก ๊ฐ์ฃผํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ด๋ ๊ฒ end๊ฐ start ์ผ์ชฝ์ ์์ ์๋ ์๋ค.
https://eteo.tistory.com/m/359
๊ทผ๋ฐ, ๋ฐ์ดํฐ๊ฐ ๊ฝ ์ฐฌ ์ํ์์ ์์๋ฅผ ์ง์ด๋ฃ์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น?
- ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์์๋ ๊ฐ์ฅ ์ค๋๋, start ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ ๋ฐ์ด๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์คํธ๋ฆฌ๋ฐ์ด๋ ๋ก๊ทธ agent์ฒ๋ผ ๋ฐ์ดํฐ์ ๋ถ๋ถ์ ์ธ ์ ์ค์ด ํฌ๊ฒ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ด ๋ฐฉ๋ฒ์ด ์ถฉ๋ถํ ํจ์จ์ ์ด๋ค. - ๊ทธ๊ฒ ์๋๋ผ๋ฉด ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ผ ํ๋ค. ํ์ ํ dynamic ring buffer๊ฐ ์ด๋ฐ ์๋ฆฌ๋ค.
์ฅ์ ๊ณผ ๋จ์
๋ฐฐ์ด์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๊ธฐ๋ฐํด์ queue ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
queue๋ฅผ ๊ตฌํํ๋ ๋ค๋ฅธ ๋ฐฉ์์ธ linked list๋ chunked array์ ๋นํด์ ์ฝ์
, ์ญ์ , ์ ๊ทผ ์๋๊ฐ ํจ์ฌ ๋ฐ์ด๋๋ค.
๋์ , (๊ธฐ๋ณธ ๊ตฌํ์ ๊ฒฝ์ฐ) ๋ฐ์ดํฐ ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์๊ณ , (dynamic ๊ตฌํ์ ๊ฒฝ์ฐ) ํ์ฅ๊ณผ ์ถ์์ ๊ด๋ฆฌ๊ฐ linked list์ ๋นํด ์ ์ฐํ์ง ๋ชปํ๋ค๋ ๋จ์ ์ด ์๋ค.
ring buffer๋ฅผ ๋์ ์ผ๋ก ๊ตฌํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ring buffer๊ฐ ์ต์ ์ผ๋ก ์๋ํ๋ ์๋๋ฆฌ์ค๋ ์ต๋ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ์๋ ๊ฒฝ์ฐ๋ค.
Dynamic Ring Buffer
ring buffer์ ์ด์์ ์ธ ์ฌ์ฉ์ฌ๋ก๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด์๋ ๊ฒฝ์ฐ์ง๋ง, ์์ฉํ๋ก๊ทธ๋จ์์๋ ๊ทธ๋ฐ ํ๊ณ์ ์ ๋๊ณ ์๋ ์จ๋จน๊ธฐ๊ฐ ์ด๋ ค์ธ ์๋ ์๋ค.
๊ทธ๋์ ์ผ๋ถ ์์ฉ ๊ตฌํ์์๋ ์ฌ์ฉ๋์ ๋ฐ๋ผ์ ์๋์ผ๋ก ๋ฐฐ์ด์ด ํ์ฅ๋๊ฑฐ๋ ์ถ์๋๋ ํํ๋ก ๋ณํ์ด ๋๊ธฐ๋ ํ๋ค.
dynamic ring buffer๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ ์ผ๋ฐํ๋์ด์์ง๋ ์์ง๋ง, ๊ทธ๋ก ์ธํด ๋ฐ์ํ๋ ๋จ์ ์ ๋์ถฉ ์ด๋ฐ ๊ฒ๋ค์ด ์์ ์ ์๋ค.
-
ํฌ๊ธฐ๊ฐ ๋๊ฑฐ๋ ์ค์ด๋ค๋๋ง๋ค, ๋ฐฐ์ด์ ์๋ก ๋ง๋ค๊ณ ์ฎ๊ฒจ์ผ ํ๋ค. ์ ์ง ์์ ๋น์ฉ์ด๊ณ , ๋์์ฑ ์ฒ๋ฆฌ์๋ ๋ถ๋ฆฌํ ์ง์ ์ด๋ค. ๊ทธ๋์ ๋ฆฌ์ฌ์ด์ง์ ๋๋ฆฌ๋ ์ฃผ๊ธฐ๋ฅผ ์ ์ ํํด์ผ ํ๋ค.
-
์ฌ์ฉ๋์ด ๊ธ๊ฒฉ์ด ๋์ด๋ฌ๋ค๊ฐ ์ค์ด๋ค ๊ฒฝ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค. ํฌ๊ธฐ๋ฅผ ์ฌ์ฉ๋์ ๋ง์ถฐ ํญ์ compactํ๊ฒ ์ ์งํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐํ๋ค.
๋ํ์ ์ธ dynamic Ring Buffer ๊ตฌํ์ฒด๋ก๋ Rust์ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ VecDeque๊ฐ ์๋ค.
Java์ ArrayDeque๋ Ring buffer ๊ธฐ๋ฐ์ ๊ตฌํ์ฒด๋ก ์๋ ค์ ธ์๋ค.