๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ C ์ธ์ด๋ฅผ ํ์ฉํ์ฌ ํต์ฌ ์๋ฃ๊ตฌ์กฐ(ADT, Abstract Data Type)๋ฅผ ๊ตฌํํ๋ ํ๋ก์ ํธ์ ๋๋ค. ๋จ์ํ ์๊ณ ๋ฆฌ์ฆ ์ค์ต์ ๋์ด, ์ค์ ๋ฆฌ๋ ์ค ์ปค๋์์ ์ฌ์ฉ๋๋ ๊ณ ๊ธ ์์คํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ์ค๋ฌด ์์ค์ ๊ฒฌ๊ณ ํ ์ํํธ์จ์ด ์ค๊ณ ์ญ๋์ ๊ธฐ๋ฅด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํนํ ์๋์ 4๊ฐ์ง ํต์ฌ ์์น์ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ์ ์๊ฒฉํ๊ฒ ์ ์ฉํฉ๋๋ค.
- ๊ตฌ์กฐ์ฒด ์๋ฒ ๋ฉ (Struct Embedding):
container_of๋งคํฌ๋ก๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ ธ๋๋ฅผ ๋ถ๋ฆฌํ๋ ์ ๋ค๋ฆญ(Generic) ์ค๊ณ - ํจ์ ํฌ์ธํฐ ํ
์ด๋ธ (Ops Table): ๊ตฌ์กฐ์ฒด ๋ด๋ถ์
ops์ธํฐํ์ด์ค๋ฅผ ๋์ด C ์ธ์ด ํ๊ฒฝ์์์ ๋คํ์ฑ(Polymorphism) ๊ตฌํ - Pimpl ์ด๋์ (Pointer to Implementation): ๋ด๋ถ ๊ตฌํ์ฒด(Internal)๋ฅผ ์จ๊ฒจ ํค๋ ํ์ผ์ ์ปดํ์ผ ์์กด์ฑ์ ํ๊ธฐ์ ์ผ๋ก ๋ฎ์ถ๋ ์ค๊ณ
- ๋ฉ๋ชจ๋ฆฌ ๋ฌด๊ฒฐ์ ๊ฒ์ฆ (Zero-Defect Memory):
Valgrind๋ฅผ ํ์ฉํ ์ฒ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak) ๋ฐ ๋๊ธ๋ง ํฌ์ธํฐ ์ถ์
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํฌ์ธํฐ ์ฐ์ฐ์ด ํต์ฌ์ธ ๋งํผ, ๋ฆฌ๋ ์ค ๋ค์ดํฐ๋ธ ํ๊ฒฝ์์ ์๊ฒฉํ ๋๋ฒ๊น ์ ์งํํฉ๋๋ค.
- OS:
Ubuntu 24.04 LTS - IDE:
Visual Studio Code (VSCode) - Compiler:
GCC (GNU Compiler Collection) - Memory Debugger:
Valgrind(Memcheck) - Build System:
Makefile
๊ฐ ๋จ๊ณ๋ณ๋ก ์ ํ ์๋ฃ๊ตฌ์กฐ๋ถํฐ ๋น์ ํ, ํ์ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ๊น์ง ์ ์ง์ ์ผ๋ก ํ์ฅํด ๋๊ฐ๋๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ดํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๊ณผ ํ๋ฅผ ํ์ฅํฉ๋๋ค.
-
01_linked_list/ -
02_stack/ -
03_queue/
๊ณ์ธต์ ๋ฐ์ดํฐ์ ๋ณต์กํ ๊ด๊ณ๋ฅผ ํํํ๊ธฐ ์ํ ํธ๋ฆฌ ๋ฐ ๊ทธ๋ํ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํฉ๋๋ค.
-
04_tree/ -
05_priority_queue/ -
06_graph/
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฒ์๊ณผ ์ ์ผ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ณ ๊ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํฉ๋๋ค.
-
07_set/ -
08_map/
๐ก ๊ฐ ๋๋ ํ ๋ฆฌ ๋ด๋ถ์๋ ์๋ฃ๊ตฌ์กฐ ์ธํฐํ์ด์ค(.h), ๋ด๋ถ ๊ตฌํ์ฒด(.c), ํ
์คํธ ์ฝ๋(main.c), ๊ทธ๋ฆฌ๊ณ Valgrind ํ
์คํธ ์๋ํ๋ฅผ ์ํ ์ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.