C์–ธ์–ด

[C์–ธ์–ด] ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์„ ์–ธ๊ณผ ํ™œ์šฉ

hyonie 2025. 1. 12. 23:57

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ผ๋Š” ๊ฐœ๋…์„ ์ ‘ํ•˜๋ฉด ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด ๊ฐ„๋‹จํ•œ๋ฐ, ์™œ ๊ตณ์ด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์จ์•ผ ํ• ๊นŒ?" ์ €๋„ ์ฒ˜์Œ์—๋Š” ์ด ์งˆ๋ฌธ์ด ๋จธ๋ฆฟ์†์„ ๋– ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ, ์–ผ๋งˆ๋‚˜ ์œ ์šฉํ•œ์ง€ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํ•จ์ˆ˜ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ๊ทธ ํ•„์š”์„ฑ์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‚ ๋ชฉ์ฐจ

     


    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ผ๋ฐ˜ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ, ๊ทธ ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์ด ํ•จ์ˆ˜์ธ ๊ฒฝ์šฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
     

    ํ•จ์ˆ˜ํฌ์ธํ„ฐ์˜ ์ฃผ์š” ํŠน์ง•

    • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ์„ ์–ธ

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

    ์ž๋ฃŒํ˜• (*ํ•จ์ˆ˜ํฌ์ธํ„ฐ์ด๋ฆ„)(์ธ์ž๋ชฉ๋ก);

     

    ๐Ÿซง ์˜ˆ์ œ: ํ•จ์ˆ˜ํฌ์ธํ„ฐ ์„ ์–ธ

    int (*func)(int a);

     

    • ํ•จ์ˆ˜๋ช… ์•ž์— (*)๋ฅผ ๋ถ™์ด๋ฉด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • ์œ„ ์„ ์–ธ์—์„œ func๋Š” int a ํ˜•์‹์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค.

     
     
     

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ์‚ฌ์šฉ ์ด์œ ๐Ÿฅธ

    Q. ์ง์ ‘ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋ฉด ๋˜๋Š”๋ฐ, ์™œ ๊ตณ์ด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ(๋™์ ๋ฐ”์ธ๋”ฉ) ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„ ํ• ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ‰์†Œ์—๋Š” ํŠน์ • ํ•จ์ˆ˜๋งŒ ํ˜ธ์ถœํ•˜๋„๋ก ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋ฉด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์—๋„ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์ฝ”๋“œ ์ˆ˜์ •์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค.
    ์‰ฝ๊ฒŒ ๋งํ•ด, ํ•จ์ˆ˜ํฌ์ธํ„ฐ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํ–‰๋™์„ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
     

    1. ์ •์  ๋ฐ”์ธ๋”ฉ๊ณผ ๋™์  ๋ฐ”์ธ๋”ฉ

    1. ์ •์  ๋ฐ”์ธ๋”ฉ(Static Binding)

    ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์—์„œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๊ฐ€ ์ปดํŒŒ์ผ ์‹œ ์ด๋ฏธ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

    int result = Plus(3, 5); // ์ปดํŒŒ์ผ ์‹œ Plus ํ•จ์ˆ˜๋กœ ๊ณ ์ •

     

     

    • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ์—์„œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์•Œ๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ปดํŒŒ์ผ ์‹œ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹คํ–‰ ์ค‘์—๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

     
    ์ •์  ๋ฐ”์ธ๋”ฉ๊ณผ ์ž…๋ ฅ๊ฐ’์˜ ๊ด€๊ณ„๋ฅผ ์ •๋ฆฌ ํ•˜์ž๋ฉด:

    1. ์ •์  ๋ฐ”์ธ๋”ฉ์˜ ํ•ต์‹ฌ์€ "ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๊ฐ€ ๊ณ ์ •"๋œ๋‹ค๋Š” ๊ฒƒ
      1. ์ •์  ๋ฐ”์ธ๋”ฉ์—์„œ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ ์ง€๊ฐ€ ์ปดํŒŒ์ผ ์‹œ์— ๊ฒฐ์ •โญ ๋ฉ๋‹ˆ๋‹ค.
      2. ์ฝ”๋“œ์—์„œ Plus(x, y)๋ผ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์žˆ๋‹ค๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ํ˜ธ์ถœ์ด ๋ฌด์กฐ๊ฑด Plus ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์•Œ๊ณ , ์ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
      3. ์ž…๋ ฅ๊ฐ’(x,y)์€ ๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋Š” ์—ฌ์ „ํžˆ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    2. scanf_s๋กœ ๋ฐ›์€ ๊ฐ’์€ ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’์ด์ง€, ํ˜ธ์ถœ ๋Œ€์ƒ์ด ์•„๋‹˜
      1. scanf_s ๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ›์€ x์™€ y๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๊ฐ’ ์ผ ๋ฟ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      2. ์ฆ‰, ์ž…๋ ฅ๊ฐ’์˜ ๋ณ€ํ™”๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€ ๋™์ž‘์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ๋ฟ, ํ˜ธ์ถœํ•  ํ•จ์ˆ˜ ์ž์ฒด Plus๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

     

    2. ๋™์  ๋ฐ”์ธ๋”ฉ(Dynamic Binding)

    ์‹คํ–‰ ์ค‘ (runtime)์— ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
    ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ ์ง€ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    int (*fptr)(int, int) = Plus;
    fptr = Minus; // ์‹คํ–‰ ์ค‘์— ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ

     

    1. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์‚ฌ์šฉ
      1. int (*fptr)(int, int)์„ ์„ ์–ธํ•˜์—ฌ ์‹คํ–‰ ์ค‘์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    2. fptr์— ๋‹ค๋ฅธ ํ•จ์ˆ˜ ์ฃผ์†Œ ํ• ๋‹น
      1. fptr = Plus → Plus ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ fptr์— ํ• ๋‹น
      2. fptr = Minus → Minus ํ•จ์ˆ˜ ์ฃผ์†Œ๋ฅผ fptr์— ํ• ๋‹น
    3. ์‹คํ–‰ ์ค‘ ํ˜ธ์ถœ ํ•จ์ˆ˜ ๋ณ€๊ฒฝ
      1. fptr(x, y)๋Š” fptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜(Plus ๋˜๋Š” Minus)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
      2. ์‹คํ–‰ ์ค‘ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ์ง€ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

     

    ๐Ÿ”Ž์‹คํ–‰ ๊ฒฐ๊ณผ

    ์ž…๋ ฅ๊ฐ’: 3 5
    ์ถœ๋ ฅ:

    ๋‘ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: 3 5
    Plus ๊ฒฐ๊ณผ = 8
    Minus ๊ฒฐ๊ณผ = -2

     
     

    2. ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„

    • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด main() ํ•จ์ˆ˜๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    void ExecuteOperation(int (*operation)(int, int), int x, int y){
      printf("๊ฒฐ๊ณผ = $d\n", operation(x, y));
    }

    ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ ํ•จ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ExecuteOperation ์„ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
     
     
     
     
     

    3. ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ์˜ ์ ์šฉ

     ์ดํด๋ฆฝ์Šค์™€ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ์„ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋งค๋ฒˆ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

    1. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ฐœ๋…

    • ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์™ธ์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด:
      • ์ดํด๋ฆฝ์Šค: ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Java, C++, Python์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ์›น ๋ธŒ๋ผ์šฐ์ €(Chrome, Firefox): ๊ด‘๊ณ  ์ฐจ๋‹จ, ํ™”๋ฉด์บก์ฒ˜, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ(ํ”Œ๋Ÿฌ๊ทธ์ธ)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

     

    2. ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ์˜ ๋ฌธ์ œ์ 

    • ๋งŒ์•ฝ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ผ์ด ๊ธฐ์กด ์ฝ”๋“œ์™€ ์–ฝํ˜€ ์žˆ์œผ๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ์ ์  ๋ณต์žกํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

     

    3. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

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

     
     

    4. ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๋‹คํ˜•์„ฑ๊ณผ ์œ ์‚ฌํ•œ ๊ฐœ๋…

    • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋‹คํ˜•์„ฑ(Polymorphism)๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ(๋ง์…ˆ, ๋บ„์…ˆ)์„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์ฝ”๋“œ ์˜ˆ์ œ: ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ํ™œ์šฉ

    #include <stdio.h>
    
    // ๋‘ ๊ฐœ์˜ ์—ฐ์‚ฐ ํ•จ์ˆ˜
    int Plus(int a, int b){
    	return a + b;
    }
    
    int Minus(int a, int b){
    	return a - b;
    }
    
    int main(){
      int x, y;
      int (*fptr)(int, int); // ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์„ ์–ธ
      
      printf("๋‘ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.");
      scanf("%d %d", &x, &y);
      
      // Plus ํ•จ์ˆ˜ ํ˜ธ์ถœ
     fptr = Plus;
     printf("Plus ๊ฒฐ๊ณผ = %d\n", fptr(x,y));
     
     // Minus ํ•จ์ˆ˜ ํ˜ธ์ถœ
     fptr = Minus;
     printf("Minus ๊ฒฐ๊ณผ = %d\n", fptr(x,y));
     
     return 0;
    }

     

    โžก๏ธ ์‹คํ–‰ ํ๋ฆ„ ์„ค๋ช…

    1. fptr = Plus;
      • Plus ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ fptr์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
      • ์ดํ›„ fptr(x, y)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Plus  ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    2. fptr = Minus;
      • Miuns ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ fptr์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
      • ์ดํ›„ fptr(x,y)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Minus ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

     

    ๊ฒฐ๋ก : ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ์™œ ์‚ฌ์šฉํ• ๊นŒ?

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