hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ

C++ ์ •๋ฆฌ - 22 (ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ,ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๊ธฐ์ดˆ,ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋ฐฐ์—ด,c++ ์ธ๋ผ์ธ(inline) ํ•จ์ˆ˜)

2020. 4. 11. 20:28
728x90

ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ

๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ทจํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ ๊ฐ€๋Šฅ

์ฆ‰, ์ฒซ ๋ฒˆ์žฌ ํ•จ์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ์งธ ํ•จ์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐพ์•„๋‚ด ์‹คํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋‹ค๋ฅธ ์‹œ๊ฐ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์‹œ๊ฐ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

 

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

1. ํ•จ์ˆ˜์˜ ์ฃผ์†Œ ์–ป๊ธฐ

think()๊ฐ€ ํ•จ์ˆ˜๋ผ๋ฉด think๋Š” ๊ทธ ํ•จ์ˆ˜์˜ ์ฃผ์†Œ. ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ ค๋ฉด ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ์ „๋‹ฌํ•˜๋ฉด ๋จ.

process(think); //think()์˜ ์ฃผ์†Œ ์ „๋‹ฌ

thought(think()); // thought()์— think()์˜ ๋ฆฌํ„ด๊ฐ’ ์ „๋‹ฌ

 

2. ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ์˜ ์„ ์–ธ

ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ, ๊ทธ ํฌ์ธํ„ฐ๊ฐ€ ์ง€์‹œํ•˜๋Š” ํ•จ์ˆ˜์˜ ๋ฐ์ดํ„ฐํ˜•์„ ์ง€์ •ํ•ด์•ผํ•จ

ex)

double pam(int); //ํ•จ์ˆ˜ ์›ํ˜•

double (*pf)(int); //pf๋Š” ํ•˜๋‚˜์˜ int๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ทจํ•˜๊ณ  double ํ˜•์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•จ

 

์ผ๋ฐ˜์ ์œผ๋กœ, ํ•จ์ˆ˜์˜ ์›ํ˜•์„ ๋จผ์ € ์ž‘์„ฑํ•œ ํ›„, ํ•จ์ˆ˜ ์ด๋ฆ„์„ (*pf) ํ˜•ํƒœ์˜ ํ‘œํ˜„์‹์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ, pf๋Š” ๊ทธ ๋ฐ์ดํ„ฐํ˜•์˜ ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

 

๊ด„ํ˜ธ๋Š” * ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.

double (*pf)(int); // pf๋Š” double์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ

double *pf(int); //pf()๋Š” doubleํ˜•์„ ์ง€์‹œํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜

 

void estimate(int lines,double (*pf)(int)); // ํ•จ์ˆ˜ ์›ํ˜•

estimate(50,pam); // ํ•จ์ˆ˜ ์ฃผ์†Œ์˜ ์ „๋‹ฌ

 

3. ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ๋ถˆ๋Ÿฌ๋‚ด๊ธฐ

double pam(int);

double (*pf)(int);

pf=pam;

double x=pam(4);

double y=(*pf)(5);

c++์€ pf๋„ ํ•จ์ˆ˜ ์ด๋ฆ„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•จ.

double y = pf(5);

 

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋ณ€ํ˜•

๋‹ค์Œ์€ ๋™์ผํ•œ ํŠน์ง•๊ณผ ๋ฆฌํ„ด ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜ ์›ํ˜•๋“ค์ด๋‹ค.

const double *f1(const double ar[],int n);

const double *f2(const double[],int);

const double *f3(const double *,int);

 

๋‹ค์Œ ์ด ์„ธ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ

const double *(*p1)(const double *,int);

์ดˆ๊ธฐํ™” ํ˜•ํƒœ๋กœ ์กฐํ•ฉ ๊ฐ€๋Šฅ

const double *(*p1)(const double *,int)=f1;

 

c++ ์ž๋™ ํ˜• ๋ณ€ํ™˜ ์‚ฌ์šฉ

auto p2=f2;

 

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๋ฐฐ์—ด

const double *(*pa[3])(const double *,int) = {f1,f2,f3};

1. ์„ธ ๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธ pa[3];

2. ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„์—์„œ []๊ฐ€ *๋ณด๋‹ค ๋†’์œผ๋ฏ€๋กœ *pa[3],[a๋Š” ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์ด๋ผ๋Š” ์˜๋ฏธ

3. ๊ฐ ํฌ์ธํ„ฐ๋“ค์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋‚˜ํƒ€๋‚ด์ค€๋‹ค

 

const double *(*pa[3])(const double *,int)

auto ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ -> ์ž๋™ ํ˜• ๋ณ€ํ™˜์€ ๋‹จ์ผ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€

๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐ์—ด pa์— ๋Œ€ํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€์ž…์œผ๋กœ ์„ ์–ธ ๊ฐ€๋Šฅ

auto pb = pa;

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ๋ฒ•

๋ฐฐ์—ด์˜ ์ด๋ฆ„์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์—, pa์™€ pb๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค.

pa[i]์™€ pb[i]๋Š” ๋ชจ๋‘ ๋ฐฐ์—ด ๋‚ด์— ์กด์žฌํ•˜๋Š” ํฌ์ธํ„ฐ์ด๊ณ , ๊ฐ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‘œํ˜„์‹์œผ๋กœ ๊ฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

 

const double *px=pa[0](av,3);

const double *py=(*pb[i])(av,3);

 

double ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด *์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๊ฐ€๋Šฅ

double x=*pa[0](av,3);

double y=*(*pb[1])(av,3);

 

auto pc=&pa; // ์ „์ฒด ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค

const double * (*(*pd)[3])(const double *,int)=&pa;

 

*pd[3] // 3๊ฐœ ํฌ์ธํ„ฐ๋“ค์˜ ๋ฐฐ์—ด

(*pd)[3] // 3๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ

 

typedef๋ฅผ ์ด์šฉํ•œ ๋‹จ์ˆœํ™”

typedef const double *(*p_fun)(const double *,int);

 

p_fun p1=f1;

p_fun pa[3]={f1,f2,f3};

p_fun (*pd)[3]=&pa;

 

c++ ์ธ๋ผ์ธ(inline) ํ•จ์ˆ˜

์ธ๋ผ์ธ ํ•จ์ˆ˜์—์„œ๋Š” ์ปดํŒŒ์ผ๋œ ํ•จ์ˆ˜ ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ์ฝ”๋“œ ์•ˆ์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฅธ ์ฃผ์†Œ๋กœ ์ ํ”„์‹œ์ผฐ๋‹ค๊ฐ€, ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๊ฒฐ๋˜๋ฉด ๋‹ค์‹œ ์›๋ž˜์˜ ์ž๋ฆฌ๋กœ ๋Œ์•„์˜จ๋‹ค.

๋”ฐ๋ผ์„œ ์ธ๋ผ์ธ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ณด๋‹ค ์•ฝ๊ฐ„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ธก๋ฉด์—์„ ๋А ์ธ๋ผ์ธ ํ•จ์ˆ˜๊ฐ€ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ณด๋‹ค ๋ถˆ๋ฆฌํ•จ.

 

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

 

์ธ๋ผ์ธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ž‘์—… ์ค‘์— ์ ์–ด๋„ ํ•œ ๊ฐ€์ง€๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•ด์•ผํ•œ๋‹ค.

1. ํ•จ์ˆ˜ ์„ ์–ธ ์•ž์— inline์„ ๋ถ™์ธ๋‹ค.

2. ํ•จ์ˆ˜ ์ •์˜ ์•ž์— inline์„ ๋ถ™์ธ๋‹ค.

 

ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ•œ ํ–‰ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํ–‰์— ๋„ฃ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ํฌ๋‹ค๋ฉด, ๊ทธ ํ•จ์ˆ˜๋Š” ์ธ๋ผ์ธ ํ•จ์ˆ˜๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์ •๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • C++ ์ •๋ฆฌ - 24 (ํด๋ž˜์Šค ๊ฐ์ฒด์™€ ์ฐธ์กฐ,๊ฐ์ฒด,์ƒ์†,์ฐธ์กฐ,setf(),์ฐธ์กฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?,ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ,ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ํ•จ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ..
    • C++ ์ •๋ฆฌ - 23 (์ฐธ์กฐ ๋ณ€์ˆ˜,์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์„ ์–ธ,ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ์„œ์˜ ์ฐธ์กฐ,์ฐธ์กฐ์˜ ํŠน์„ฑ,lvalue,๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ,์ฐธ์กฐ๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ์ฃผ์˜ํ•  ์ )
    • C++ ์ •๋ฆฌ - 21 (ํ•จ์ˆ˜์™€ C์Šคํƒ€์ผ์˜ ๋ฌธ์ž์—ด, ํ•จ์ˆ˜์™€ ๊ตฌ์กฐ์ฒด,ํ•จ์ˆ˜์™€ string ํด๋ž˜์Šค ๊ฐ์ฒด, ํ•จ์ˆ˜์™€ array ๊ฐ์ฒด, ์žฌ๊ท€ํ˜ธ์ถœ)
    • C++ ์ •๋ฆฌ - 20 (ํฌ์ธํ„ฐ์™€ const, ํ•จ์ˆ˜์™€ 2์ฐจ์› ๋ฐฐ์—ด)
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”