[Cμ–Έμ–΄] ν•¨μˆ˜μ™€ κΈ°μ–΅ 클래슀(1)

2025. 10. 15. 17:13Β·πŸ› οΈBackend/βš™οΈC

βœ… 1. ν•¨μˆ˜μ˜ κ°œλ…

(1) ν•¨μˆ˜(function) λž€?

  • ν•¨μˆ˜λž€, νŠΉμ •ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€κ³„λœ 독립적인 μ½”λ“œ 블둝을 μ˜λ―Έν•œλ‹€.
  • ν•¨μˆ˜μ— μ½”λ“œ 블둝에 μ •μ˜λœ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•  수 있음.
  • λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 ν•¨μˆ˜μ— 데이터λ₯Ό 전달 ν•  수 있음.
  • μž‘μ—…μ„ μ™„λ£Œν•˜λ©΄ ν˜ΈμΆœν•œ 곳으둜 볡귀 즉, return 을 ν•˜κ²Œ 됨.
  • 볡귀할 λ•Œ 결과값을 λ°˜ν™˜ν•  수 있음.
  • C ν”„λ‘œκ·Έλž¨μ€ ν•¨μˆ˜λ₯Ό κΈ°λ³Έ λ‹¨μœ„λ‘œ ν•˜μ—¬ ꡬ성이 됨.

(2) ν•¨μˆ˜μ˜ νŠΉμ„±

[ ν•¨μˆ˜μ˜ μž₯점 ]

  • 크고 λ³΅μž‘ν•œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ€ 크기의 의미 μžˆλŠ” μž‘μ—… λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬ ꡬ성할 수 있음.
  • κ°„κ²°ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μš°λ©° μœ μ§€ 관리가 μ‰¬μ›Œμ§ˆ 수 있음.
  • 반볡 μ‚¬μš©λ˜λŠ” μ½”λ“œμ˜ 쀑볡을 μ΅œμ†Œν™” ν•  수 있음.
  • 잘 μ„€κ³„λœ ν•¨μˆ˜λŠ” λ‹€λ₯Έ μ‘μš©μ—μ„œ μž¬μ‚¬μš©ν•  수 있음.

[ ν•¨μˆ˜μ˜ 단점 ]

  • ν•¨μˆ˜ 호좜과 볡귀 κ³Όμ •μ—μ„œ λΆ€λŒ€λΉ„μš©μ΄ 좔가될 수 있음.

(3) ν•¨μˆ˜μ˜ μœ ν˜•

[ ν‘œμ€€ν•¨μˆ˜ ]

  • C μ–Έμ–΄ μžμ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μ΄λ©°, μ’…λ₯˜λŠ” λ‹€μ–‘ν•˜λ‹€.
  • μž…μΆœλ ₯ 및 파일 κ΄€λ ¨ ν•¨μˆ˜
  • λ¬Έμžμ—΄ 처리 ν•¨μˆ˜
  • λ©”λͺ¨λ¦¬ κ΄€λ ¨ ν•¨μˆ˜
  • μˆ˜ν•™ ν•¨μˆ˜
  • κ·Έ 밖에 λ‹€μ–‘ν•œ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ 등이 있음.

[ μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜ ]

  • μ‚¬μš©μžμ˜ ν•„μš”μ— 따라 νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ„λ‘ μ •μ˜λ˜λŠ” ν•¨μˆ˜μ΄λ‹€. 즉, 직접 λ§Œλ“€μ–΄μ„œ μ΄μš©ν•˜λŠ” κ²ƒμž„.

βœ… 2. ν‘œμ€€ ν•¨μˆ˜

(1) ν‘œμ€€ ν•¨μˆ˜λž€?

  • C μ–Έμ–΄μ—μ„œ ν”„λ‘œκ·Έλž¨ μž‘μ„±μ— ν•„μš”ν•œ κΈ°λ³Έ κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ 제곡된 ν•¨μˆ˜μ˜ 집합이닀.
  • 이 ν‘œμ€€ ν•¨μˆ˜λŠ” ν‘œμ€€ 라이브러리 ν˜•νƒœλ‘œ 제곡이 λœλ‹€.
  • 각 ν•¨μˆ˜μ˜ μ›ν˜•μ„ κΈ°λŠ₯λ³„λ‘œ ν—€λ”νŒŒμΌλ‘œ μ œκ³΅μ„ 함.
  • ν•¨μˆ˜μ˜ μ›ν˜•: ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 데 ν•„μš”ν•œ 사항을 미리 μ„ μ–Έν•˜λŠ” λ¬Έμž₯
  • μ‰½κ²Œλ§ν•΄, 미리 μ •μ˜ 된 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ˜ 이름, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜κ°’μ˜ μžλ£Œν˜•μ„ μ½”λ“œμ— λ„£μ–΄μ„œ μ„ μ–Έν•˜λŠ”κ²ƒμž„.
  • ν•„μš”ν•œ ν‘œμ€€ν•¨μˆ˜μ˜ μ›ν˜•μ΄ μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν—€λ”νŒŒμΌμ„ 미리 포함(#include)ν•΄μ•Ό 함.

(2) μ£Όμš” ν‘œμ€€ν•¨μˆ˜

 

(3) ν‘œμ€€ν•¨μˆ˜μ˜ μ‚¬μš© μ˜ˆμ‹œ

  • C μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” math 헀더 파일 내에 μ‘΄μž¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ ν™œμš©ν•œ μ˜ˆμ‹œμ΄λ‹€.

βœ… 3. μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜

(1) ν•¨μˆ˜μ˜ μ •μ˜

  • μœ„μ™€ 같은 ν˜•μ‹μœΌλ‘œ μ‚¬μš©μž ν•¨μˆ˜λ₯Ό μ •μ˜ ν•  수 있음. C κ°€ μ œκ³΅ν•΄μ£ΌλŠ” ν‘œμ€€ ν•¨μˆ˜ λ˜ν•œ λ‚΄λΆ€μ—λŠ” μ΄λŸ°μ‹μœΌλ‘œ 되있음.
  • ν•¨μˆ˜ 헀더: λ°˜ν™˜ μžλ£Œν˜•, ν•¨μˆ˜λͺ…, λ§€κ°œλ³€μˆ˜ 리슀트λ₯Ό μ°¨λ‘€λ‘œ μž‘μ„± ( 블둝 μœ„μ— ν•¨μˆ˜ μ •μ˜ λ‚΄μš© λΆ€λΆ„ )
  • ν•¨μˆ˜ λͺΈμ²΄: ν•¨μˆ˜κ°€ μ²˜λ¦¬ν•  μž‘μ—…μ„ μ •μ˜ν•˜λŠ” λ¬Έμž₯을 λ‚˜μ—΄ ν•  수 있음. ( 블둝 λ‚΄λΆ€λ₯Ό 의미 )

(2) ν•¨μˆ˜μ˜ 호좜 및 λ°˜ν™˜

  • ν•¨μˆ˜μ˜ 이름과 인수λ₯Ό μ œκ³΅ν•˜μ—¬ 호좜 ν•  수 있으며, λ°˜ν™˜ νƒ€μž…μ„ μ•Œλ§žκ²Œ μ •ν•΄μ„œ λ°›μ•„μ€˜μ•Ό 함. return νƒ€μž…
  • μ‹€ λ§€κ°œλ³€μˆ˜: sum(x, y) λΆ€λΆ„μ˜ ν•¨μˆ˜λ₯Ό 호좜 ν•  λ•Œ λ„£λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό μ˜λ―Έν•¨
  • ν˜•μ‹ λ§€κ°œλ³€μˆ˜: sum(int a, int b) λΆ€λΆ„μ˜ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ λ“€μ–΄κ°€λŠ” ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ˜λ―Έν•¨.
  • ν•¨μˆ˜ 헀더에 μžλ£Œν˜•μ„ λ„£κ²Œ 되면, ν•΄λ‹Ή μžλ£Œν˜•μ— λ§žλ„λ‘ return 을 μ¨μ„œ 결과값을 λ°˜ν™˜ ν•  수 있음.
  • 그러면, ν˜ΈμΆœν•˜λŠ” μͺ½μ—μ„œ μ˜¬λ°”λ₯Έ μžλ£Œν˜•μ— λ§žλŠ” λ³€μˆ˜λ‘œ 값을 λ°›μ•„μ•Ό 함.

(3) ν•¨μˆ˜μ˜ μ›ν˜•

#include <stdio.h>

int sum(int a, int b); // ν•¨μˆ˜μ˜ μ›ν˜•

int main() {
    int result = sum(1, 2);
    printf("%d", result);
}

int sum(int a, int b) {
    return a + b;
}
  • ν•¨μˆ˜μ˜ μ›ν˜•μ€ ν•¨μˆ˜λ₯Ό μ‹€μ œλ‘œ μ •μ˜ν•˜κΈ° 전에, μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ‚¬μš© ν•  ν•¨μˆ˜λ₯Ό 미리 μ•Œλ €μ£ΌλŠ” μ„ μ–Έλ¬Έμž„.
  • μ˜ˆμ‹œ μ½”λ“œλ₯Ό 보면, main() ν•¨μˆ˜ 밑에 sum() ν•¨μˆ˜κ°€ μ •μ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ— main() ν•¨μˆ˜μ—μ„œλŠ” sum() 을 ν˜ΈμΆœν•΄λ„ sum() 이 μ •μ˜κ°€ λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ―€λ‘œ λͺ¨λ¦„ 즉, 컴파일 였λ₯˜κ°€ 뜰 수 있음.
  • ν•˜μ§€λ§Œ, int sum(int a, int b); 와 같이 ν•¨μˆ˜μ˜ μ›ν˜•μΈ ν•¨μˆ˜μ˜ 선언문을 μž‘μ„±ν•˜κ²Œ λœλ‹€λ©΄ ν•΄λ‹Ή ν•¨μˆ˜κ°€ μ–΄λŠ μ½”λ“œλΌμΈμ— 있던 호좜이 κ°€λŠ₯해짐.
#include <stdio.h>

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

int main() {
    int result = sum(1, 2);
    printf("%d", result);
}

 

  • λ°˜λŒ€λ‘œ 생각해보면 sum() ν•¨μˆ˜κ°€ main() ν•¨μˆ˜ μœ„μ— μ •μ˜κ°€ λ˜μ–΄μžˆλ‹€λ©΄, ν•¨μˆ˜μ˜ μ›ν˜• -> μ„ μ–Έλ¬Έ 없이 호좜이 κ°€λŠ₯함.

  • λ˜ν•œ, 헀더 파일(mymath.h)μ—λŠ” μΈν„°νŽ˜μ΄μŠ€ 처럼 ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄ λ‘˜ 수 있고, κ΅¬ν˜„ c ν™•μž₯자λ₯Ό κ°€μ§€λŠ” κ΅¬ν˜„ 파일(mymath.h)을 λ§Œλ“€μ–΄μ„œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ •μ˜ ν•΄μ„œ μ‚¬μš©μ„ ν•  수 있음.
  • μ΄λ•Œ, main() ν•¨μˆ˜μ—μ„œλŠ” mymath.h 헀더 νŒŒμΌμ„ include ν•¨μœΌλ‘œμ¨, ν•¨μˆ˜ 선언문을 κ°€μ§€κ³ μ™€μ„œ ν•¨μˆ˜λ₯Ό μ‚¬μš© ν•  수 있음.
  • λ§Œμ•½ mymath.c 와 같이 κ΅¬ν˜„ 파일이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ main() ν•¨μˆ˜μ—μ„œ 직접 κ΅¬ν˜„μ„ ν•΄μ€˜μ•Όν•¨.
  • mymath.c 와 같이 κ΅¬ν˜„ 파일이 μ‘΄μž¬ν•˜λ©΄ main() μ—μ„œλŠ” λ‹¨μˆœνžˆ mymath.h 의 μ„ μ–Έλœ ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•˜λ©΄ 됨.

βœ… 4. μ •λ¦¬ν•˜κΈ°

  • ν•¨μˆ˜λŠ” ν•¨μˆ˜ 헀더와 λͺΈμ²΄ λΈ”λ‘μœΌλ‘œ ꡬ성이 됨.
  • ν•¨μˆ˜μ˜ ν—€λ”μ—λŠ” λ°˜ν™˜νƒ€μž…, ν•¨μˆ˜λͺ…, λ§€κ°œλ³€μˆ˜λ₯Ό μ •μ˜ν•΄μ•Ό 함.
  • ν•¨μˆ˜μ˜ λͺΈμ²΄ λΈ”λ‘μ—λŠ” ν•¨μˆ˜μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ 됨. λ°˜ν™˜ νƒ€μž…μ΄ μžˆλŠ” 경우 return 값을 μ˜¬λ°”λ₯΄κ²Œ λ„˜κ²¨μ€˜μ•Όν•¨.
  • λͺ¨λ“  ν•¨μˆ˜λŠ” μ‚¬μš©λ˜κΈ° 전에 미리 선언을 해야함. 이 선언문이 ν•¨μˆ˜μ˜ μ›ν˜•μœΌλ‘œ λ³Ό 수 있음.
  • ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œλŠ” 2개 μ΄μƒμ˜ ν•¨μˆ˜κ°€ λ™μΌν•œ 이름을 κ°€μ§ˆ 수 μ—†μŒ.

'πŸ› οΈBackend > βš™οΈC' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Cμ–Έμ–΄] λ°°μ—΄κ³Ό 포인터(1)  (0) 2025.10.16
[Cμ–Έμ–΄] ν•¨μˆ˜μ™€ κΈ°μ–΅ 클래슀(2)  (0) 2025.10.15
[Cμ–Έμ–΄] 선택 μ œμ–΄λ¬Έκ³Ό 반볡 μ œμ–΄λ¬Έ  (0) 2025.10.13
[Cμ–Έμ–΄] μž…μΆœλ ₯ ν•¨μˆ˜μ™€ μ—°μ‚°μž(2)  (0) 2025.10.03
[Cμ–Έμ–΄] μž…μΆœλ ₯ ν•¨μˆ˜μ™€ μ—°μ‚°μž(1)  (0) 2025.09.05
'πŸ› οΈBackend/βš™οΈC' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Cμ–Έμ–΄] λ°°μ—΄κ³Ό 포인터(1)
  • [Cμ–Έμ–΄] ν•¨μˆ˜μ™€ κΈ°μ–΅ 클래슀(2)
  • [Cμ–Έμ–΄] 선택 μ œμ–΄λ¬Έκ³Ό 반볡 μ œμ–΄λ¬Έ
  • [Cμ–Έμ–΄] μž…μΆœλ ₯ ν•¨μˆ˜μ™€ μ—°μ‚°μž(2)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (195) N
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (51) N
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ’»μ»΄ν“¨ν„°κ³Όν•™ 개둠 (15)
        • πŸ”’μžλ£Œκ΅¬μ‘° (13) N
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (11)
        • πŸ–₯️컴퓨터과학과 (1)
      • πŸ› οΈBackend (68)
        • πŸ“šλ°±μ—”λ“œ 곡뢀 (4)
        • β˜•Java (23)
        • 🌳Spring (13)
        • βš™οΈC (12)
        • ⚑Python (13)
        • JavaScript (1)
        • πŸ›’οΈDatabase (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (64)
      • 정보 (2)
      • 정리가 ν•„μš”ν•œ κΈ€ (2)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    파이썬
    C
    μœ λΉ„μΏΌν„°μŠ€
    μž…μΆœλ ₯
    μžλ°”
    Python
    λ°°μ—΄
    Java
    컴파일러
    C μ–Έμ–΄
    컴퓨터과학 개둠
    자료ꡬ쑰
    μ»΄ν“¨ν„°μ˜ 이해
    Cμ–Έμ–΄
    λ°©ν†΅λŒ€
    ν•¨μˆ˜
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…κ°œλ‘ 
    λ°©μ†‘λŒ€
    spring
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[Cμ–Έμ–΄] ν•¨μˆ˜μ™€ κΈ°μ–΅ 클래슀(1)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”