[D]ynamic [L]ink [L]ibrary

์œ„๋ฆฐ์ดยท2025๋…„ 8์›” 29์ผ

๐Ÿ’ฅ 1. DLL์ด๋ž€?

๐Ÿ‘‰ DLL = ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ํ•จ๊ป˜ ์“ฐ๋Š” โ€œ๊ณต์šฉ ์ฐฝ๊ณ (๋„์„œ๊ด€)โ€

  • ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ, ๊ณ„์‚ฐํ•˜๊ธฐ, ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ, ์Œ์•… ์žฌ์ƒํ•˜๊ธฐ ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ๋งŽ์•„์š”.
  • ์ด ๊ธฐ๋Šฅ๋“ค์„ ๋งค๋ฒˆ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์— ๋„ฃ์œผ๋ฉด ์ค‘๋ณต๋˜๊ณ , ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜์ฃ .
  • ๊ทธ๋ž˜์„œ ๊ธฐ๋Šฅ๋“ค์„ ๋”ฐ๋กœ ๋ชจ์•„์„œ ํ•˜๋‚˜์˜ ํŒŒ์ผ(DLL) ๋กœ ๋งŒ๋“ค์–ด๋‘๋ฉด, ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โžก๏ธ ์ฆ‰, DLL์€ ๊ธฐ๋Šฅ์ด ๋“ค์–ด์žˆ๋Š” ๊ณต์œ  ํŒŒ์ผ์ด์—์š”.
(Windows์—์„œ๋Š” .dll, ๋ฆฌ๋ˆ…์Šค๋Š” .so, macOS๋Š” .dylib)


โœจ 2. DLL๊ณผ ํ”„๋กœ๊ทธ๋žจ ๊ด€๊ณ„ (๋น„์œ )

  • ํ”„๋กœ๊ทธ๋žจ(EXE) = ์‹๋‹น ์ฃผ๋ฐฉ์žฅ
  • DLL = ์˜†์ง‘์— ์žˆ๋Š” ๋งŒ๋Šฅ ๋ฐ˜์ฐฌ๊ฐ€๊ฒŒ

๐Ÿ‘‰ ์ฃผ๋ฐฉ์žฅ์ด ์ง์ ‘ ๋ฐ˜์ฐฌ์„ ๋‹ค ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ฃ .
๐Ÿ‘‰ ๋ฐ˜์ฐฌ๊ฐ€๊ฒŒ(DLL)์— ๊ฐ€์„œ ํ•„์š”ํ•œ ๋ฐ˜์ฐฌ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด์—์š”.

  • DLL ํŒŒ์ผ๋งŒ ๋ฐ”๊พธ๋ฉด, ๋ชจ๋“  ์‹๋‹น(ํ”„๋กœ๊ทธ๋žจ)๋“ค์ด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐ˜์ฐฌ์„ ์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹ 3. DLL ๋งŒ๋“œ๋Š” ์˜ˆ (์•„์ฃผ ๋‹จ์ˆœ)

// MyMathDll.h
extern "C" __declspec(dllexport) int Add(int a, int b);
// MyMathDll.cpp
#include "MyMathDll.h"

int Add(int a, int b) {
    return a + b;
}

๐Ÿ“Œ ๋นŒ๋“œํ•˜๋ฉด MyMathDll.dll ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
์ด ์•ˆ์—๋Š” ๋”ํ•˜๊ธฐ ๊ธฐ๋Šฅ์ด ๋“ค์–ด ์žˆ์–ด์š”.


๐Ÿค– 4. DLL ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

#include "MyMathDll.h"
#include <iostream>
using namespace std;

int main() {
    cout << Add(3, 5);  // DLL์˜ Add ํ•จ์ˆ˜ ์‚ฌ์šฉ โ†’ 8 ์ถœ๋ ฅ
}

โžก๏ธ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—๋Š” Add ์ฝ”๋“œ๊ฐ€ ์—†์–ด์š”.
โžก๏ธ ์‹คํ–‰ํ•  ๋•Œ DLL์—์„œ ๋นŒ๋ ค์™€์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


โœŒ 5. DLL์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•

  1. ์ •์  ๋งํฌ (lib + dll ํ•จ๊ป˜ ์‚ฌ์šฉ)

    • ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ DLL ๋ถˆ๋Ÿฌ์˜ด
    • ๊ฐ„๋‹จํ•˜๊ณ  ๋ณดํ†ต ๋งŽ์ด ์“ฐ์ž„
  2. ๋™์  ๋กœ๋“œ (LoadLibrary, GetProcAddress)

    • ์‹คํ–‰ ์ค‘์— โ€œํ•„์š”ํ•œ DLLโ€๋งŒ ๋ถˆ๋Ÿฌ์˜ด
    • ํ”Œ๋Ÿฌ๊ทธ์ธ, ํ™•์žฅ ๊ธฐ๋Šฅ ๊ฐ™์€ ๋ฐ ๋งŽ์ด ์‚ฌ์šฉ

๐Ÿ’ช 6. DLL์˜ ์žฅ์ 

โœ… ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ (ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ)
โœ… ์—…๋ฐ์ดํŠธ ์‰ฝ๋‹ค (DLL๋งŒ ๊ต์ฒดํ•˜๋ฉด ๋จ)
โœ… ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ (์šด์˜์ฒด์ œ๊ฐ€ DLL์„ ํ•œ ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณต์œ )
โœ… ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ ๊ฐ€๋Šฅ (ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ)


๐Ÿ“ 7. ์•„์ฃผ ์‰ฝ๊ฒŒ ์š”์•ฝ

  • DLL = ๊ธฐ๋Šฅ์„ ๋‹ด์•„๋‘” ๊ณต์œ  ์ฐฝ๊ณ (๋„์„œ๊ด€, ๋ฐ˜์ฐฌ๊ฐ€๊ฒŒ)
  • ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์”€
  • ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๋Š” ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , DLL๋งŒ ๊ต์ฒดํ•ด๋„ ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€