TIL

λ³€μˆ˜μ˜ μ’…λ₯˜

indeeah 2023. 1. 4. 13:22

πŸ’‘ λ³€μˆ˜λŠ” μ…€ 수 없이 많이 μ¨μ™”λŠ”λ° κ·Έ μ’…λ₯˜λ‚˜ μ“°μ΄λŠ” 방법에 λŒ€ν•΄ λ¬»λŠ”λ‹€λ©΄ 5μ΄ˆλ§Œμ— 닡이 λ‚˜μ˜¬ 것 κ°™μ§€λŠ” μ•Šμ•˜λ‹€. κ·Έλž˜μ„œ 이번 ν¬μŠ€νŠΈμ—μ„œλŠ” λ³€μˆ˜μ˜ μ’…λ₯˜μ— λŒ€ν•΄ λΈ”λ‘œκΉ… 해보도둝 ν•˜κ² λ‹€.

컴퓨터가 λ³€μˆ˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법

μ½”λ“œ μ˜μ—­λ°μ΄ν„° μ˜μ—­νž™ μ˜μ—­μŠ€νƒ μ˜μ—­

μ†ŒμŠ€μ½”λ“œ μ „μ—­ λ³€μˆ˜, 정적 λ³€μˆ˜ 동적 ν• λ‹Ή λ³€μˆ˜ μ§€μ—­ λ³€μˆ˜, λ§€κ°œλ³€μˆ˜

λ©”λͺ¨λ¦¬μ˜ κ΅¬μ‘°λŠ” λ„ˆλ¬΄ κΈΈμ–΄μ§ˆ 것 κ°™μ•„μ„œ λ‹€λ₯Έ ν¬μŠ€νŒ…μ—μ„œ λ‹€λ£¨κΈ°λ‘œ ν•˜κ² λ‹€.

μ „μ—­λ³€μˆ˜

  • μ „μ—­λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“  μ ‘κ·Όκ°€λŠ₯ν•œ λ³€μˆ˜μ΄λ‹€.
  • ν•΄λ‹Ή νŒŒμΌμ„ λ„˜μ–΄ λ‹€λ₯Έ νŒŒμΌμ—μ„œλ„ 접근이 κ°€λŠ₯ν•˜λ‹€.
  • main ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κΈ° 전에 ν”„λ‘œκ·Έλž¨μ— λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœλ‹€.
  • λ©”λͺ¨λ¦¬ 데이터 μ˜μ—­μ— μ μž¬λœλ‹€.
#include <stdio.h>

int global = 10;

int globalTest() {
	global += 5;
	printf("ν•¨μˆ˜μ—μ„œ μ „μ—­λ³€μˆ˜ μ‚¬μš© : %d\\n", global);
}

int main() {
	printf("μ „μ—­λ³€μˆ˜ : %d\\n", global);
	globalTest();

	return 0;
}

μ§€μ—­λ³€μˆ˜

  • νŠΉμ • λΈ”λ‘μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
  • ν•¨μˆ˜κ°€ μ‹€ν–‰λ λ•Œλ§ˆλ‹€ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜λ©°, ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλœλ‹€.
  • λ©”λͺ¨λ¦¬ μŠ€νƒ μ˜μ—­μ— κΈ°λ‘λœλ‹€.
#include <stdio.h>

int functionTest() {
	int temp = 5;
	temp += result;   // resultλ³€μˆ˜λ₯Ό 뢈러올 수 μ—†κΈ° λ•Œλ¬Έμ— Error
	
	return temp;
}

int main() {
	int result = 10;
	printf("result κ²°κ³Ό : %d\\n", functionTest());
	
	return 0;
}

μ •μ λ³€μˆ˜

  • μ„ μ–Έλœ 파일 λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ λ•Œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ ν•΄μ œλœλ‹€.
  • 데이터 μ˜μ—­μ— μ μž¬λœλ‹€.
    • μ „μ—­ λ³€μˆ˜μ— μ„ μ–Έλœ static ν‚€μ›Œλ“œμ˜ 의미 : μ„ μ–Έλœ 파일 λ‚΄μ—μ„œλ§Œ μ°Έμ‘°λ₯Ό ν—ˆμš©
    • ν•¨μˆ˜ 내에 μ„ μ–Έλœ static ν‚€μ›Œλ“œμ˜ 의미 : ν•œλ²ˆλ§Œ μ΄ˆκΈ°ν™”λ˜κ³ , μ§€μ—­ λ³€μˆ˜μ™€ 달리 ν•¨μˆ˜λ₯Ό λΉ μ Έλ‚˜κ°€λ„ μ†Œλ©Έλ˜μ§€ μ•ŠλŠ”λ‹€.
  1. 정적 μ§€μ—­λ³€μˆ˜ μ˜ˆμ‹œ
#include <stdio.h>

void set_num(){
	static int num;
  printf("%d\\n", num);
  num++;
}

int	main(){
	set_num();
	set_num();
  set_num();

  return 0;
}

/* κ²°κ³Ό : 0
				 1 //값이 μœ μ§€λœ μ±„λ‘œ μ¦κ°€λœλ‹€.
         2 */
#include <stdio.h>

void set_num(){
	static int num;
  printf("%d\\n", num);
  num++;
}

int	main(){
	set_num();
	printf("%d\\n", num); // num이 μ§€μ—­λ³€μˆ˜μ΄κΈ° λ•Œλ¬Έμ— Error λ°œμƒ
  return 0;
}
  1. 정적 μ „μ—­λ³€μˆ˜ μ˜ˆμ‹œ
#include <stdio.h>

static int num = 1;

void increase_num(){
    num++;
    printf("%d\\n", num);
}

int	main(){
	printf("%d\\n", num);
	increase_num();
	increase_num();

  return 0;
}

/* κ²°κ³Ό : 0
				 1 //값이 μœ μ§€λœ μ±„λ‘œ μ¦κ°€λœλ‹€.
         2 */

λ ˆμ§€μŠ€ν„°λ³€μˆ˜

  • CPU에 κ°€κΉŒμ›Œμ„œ 속도가 λΉ λ₯΄λ‹€.
  • 맀우 λΉ λ₯΄κΈ° λ•Œλ¬Έμ— λ°˜λ³΅λ¬Έμ— 쓰이기 μ λ‹Ήν•˜λ‹€.
  • λ‘κ°œ 이상 μ‚¬μš©ν•˜λ©΄ CPU에 무리λ₯Ό μ£Όλ―€λ‘œ λ ˆμ§€μŠ€ν„°λ³€μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†κ³  auto λ³€μˆ˜λ‘œ μ „ν™˜λœλ‹€.
  • 맀우 ν•œμ •λ˜μ–΄ μžˆκΈ°λ•Œλ¬Έμ— μ •ν™•νžˆ μ²˜λ¦¬λ μ§€λŠ” μž₯λ‹΄ν•  수 μ—†λ‹€.
#include <stdio.h>

int main() {
	register int cnt;
	register long sum;

	sum = 0;
	for(cnt = 1 ; cnt < ; cnt++) {
		sum += cnt;
	}
	printf("sum is %d\\n", sum);
	
	return 0;
}
	

λ§€κ°œλ³€μˆ˜

  • 값에 μ˜ν•œ 전달 방식은 ν•¨μˆ˜λ‚΄μ—μ„œ 마치 μ§€μ—­λ³€μˆ˜μ²˜λŸΌ λ³€μˆ˜λ₯Ό μƒˆλ‘­κ²Œ μƒμ„±ν•œλ‹€.
  • 참쑰에 μ˜ν•œ 전달방식은 μ£Όμ†Œλ₯Ό μ „λ‹¬ν•˜λ―€λ‘œ μ›λž˜μ˜ λ³€μˆ˜ μžμ²΄μ— μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
    • μ°Έμ‘° 전달을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ§€κ°œλ³€μˆ˜ μ•žμ— &을 λΆ™μ—¬μ£Όλ©΄ λœλ‹€.
  • λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” parameterλ₯Ό λœ»ν•œλ‹€.
int add(int x, int y) {   // x와 yκ°€ λ§€κ°œλ³€μˆ˜
	return x + y;
}

add(2, 7);   // 2와 7이 인수(argument)

마치며..

μ „μ—­λ³€μˆ˜μ™€ μ •μ λ³€μˆ˜κ°€ 많이 ν—·κ°ˆλ Έμ—ˆλŠ”λ° 이번 ν¬μŠ€νŒ…μœΌλ‘œ ν™•μ‹€ν•˜κ²Œ 이해가 된 것 κ°™λ‹€.

λ ˆμ§€μŠ€ν„° λ³€μˆ˜λŠ” 처음 λ“€μ–΄λ΄€λŠ”λ° λ ˆμ§€μŠ€ν„° λ³€μˆ˜λ„ 잘 ν™œμš©ν•˜λ©΄ λΉ λ₯Έ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ 수 μžˆμ„ 것 κ°™λ‹€.

μ°Έκ³ ν•œ μžλ£Œλ“€

https://edu.goorm.io/learn/lecture/201/ν•œ-λˆˆμ—-λλ‚΄λŠ”-cμ–Έμ–΄-기초/lesson/1271588/μ „μ—­λ³€μˆ˜μ™€-μ§€μ—­λ³€μˆ˜

https://velog.io/@dlvnfma0501/variable

https://m.blog.naver.com/altongman10/222129940024