Blog/JAVA기반 스마트웹 개발2021

프로그래밍 언어 활용 part 1 - 변수의 스코프

고구마달랭이 2021. 7. 26. 20:44

변수의 스코프

[학습내용] [학습목표]
지역변수
전역변수
지역변수의 유효범위를 알고 사용할 수 있다.
▪ 전역변수의 유효범위를 알고 사용할 수 있다.

지역변수

 

1. 개요

변수 스코프(Scope) : 변수 참조가 가능한 유효범위

함수 내에 선언된 변수, Local Variable

변수가 선언된 블록에서만 유효한 변수

함수가 시작 시 생성, Stack에 생성

함수가 종료되면 변수도 소멸

초기화 전 쓰레기 값을 가지고 있음

매개변수도 지역변수

 

int main()
{
 int a,b;
 char c;
}
void sub()
{
int a;
}

 


2. 유효범위

▪ 변수가 선언된 블록에서만 유효

int main()

{

int a=3,b;

char c;

}

void sub()

{

printf(“%d”, a);

}

 

 

▪ 함수 시작 시 생성되고 종료 시 소멸

int main()

{

int a=3,b;

char c;

sub();

}

void sub()

{

int a=5;

printf(“%d”, a);

}

 

▪ 생성 시 쓰레기 값을 가짐

▪ 매개변수도 지역변수임

int main()

{

int a=3,b;

char c;

printf(“%d”, a);

printf(“%d”, b);

b=2;

sub(a);

printf(“%d”, a);

printf(“%d”, b);

return 0;

}

void sub(int b)

{

int a=5;

printf(“%d”, a);

b = a+b;

printf(“%d”, b);

}

 

▪ 블록 내에서 변수 선언이 가능(C99)

▪ 선언된 블록에서 유효

 

C 언어 표준
 1983(ANSI : American National Standard Institute) 에서 ANSI C라는 표준안을 발표
 이후 ISO 주도로 표준안을 발표(C99, C11)

전역변수

▪ 프로그램 내 전체 함수에서 유효, Global Variable

▪ 프로그램 시작 시 생성, 데이터 영역에 생성

▪ 프로그램 종료 시 소멸

▪ 함수 밖에서 선언

▪ 자동으로 0으로 초기화

▪ 전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대

▪ 모듈화의 독립성 확보가 어려움

▪ 메모리 공간을 점유

▪ 동일한 이름의 전역변수와 지역변수 사용 시 지역변수가 우선함

#include <stdio.h>

int sub(int);

int main()

{

int a

printf(“%d”, a); a=3;

printf(“%d”, a);

a = sub(a);

printf(“%d”, a);

return 0;

}

int sub( int a)

{

printf(“%d”, a);

a++;

return a;

}

 

#include <stdio.h>

int a;

int main()

{

printf(“%d”, a); a=3;

printf(“%d”, a);

sub();

printf(“%d”, a);

return 0;

}

void sub( )

{

printf(“%d”, a);

a++;

}

 

#include <stdio.h>

int a;

int main()

{

int a= 7;

printf(“%d”, a); a=3;

printf(“%d”, a);

sub();

printf(“%d”, a);

return 0;

}

void sub( )

{

int a = 5;

printf(“%d”, a);

a++;

}

 

 

 


 

 

2. 다중 파일

▪ extern을 선언하여 외부에서도 참조 가능

▪ extern int 변수;  외부에 선언된 변수를 참조한다는 선언문

main.c sub.c
#include <stdio.h>

int a;

int main()
{

int a= 7;

printf(“%d”, a); a=3;
printf(“%d”, a);

sub();

printf(“%d”, a);

return 0;
}
extern int a;

void sub( )
{

printf(“%d”, a);
a++;
}

 

 

 


 

 

평가하기

 

Q1. 지역변수에 대한 설명으로 옳지 않은 것은 무엇인가?


스택 영역에 생성된다.
② 선언 시 0으로 초기화된다.
③ 선언된 블록을 빠져나가면 소멸된다.
블록 내에서 선언되는 변수이다.

 

지역변수는 선언만 하고 자동으로 초기화하지는 않으므로 쓰레기 값이 있습니다.




Q2. 다음 중 전역변수에 대한 설명으로 옳지 않은 것은 무엇인가?


함수 밖에서 선언되어 프로그램 전체에서 유효하다.
② 선언 시 자동으로 0으로 초기화된다.
③ 동일 프로그램 내의 다른 함수에서 사용하려면 별도의 선언문을 추가해야 한다.
필요 시 다른 파일에서도 사용 가능하다.

 

전역변수는 다른 함수에서도 별도의 선언 없이 유효합니다.

 



Q3. 전역변수 정수형을 선언하면 어떤 값으로 초기화되는가?


초기화되지 않음
0으로 초기화
③ 1로 초기화
④ null로 초기화

정수형은 0으로 초기화됩니다.

 

 

 


 

 

학습정리

 

1. 지역변수

변수 스코프(Scope) : 변수 참조가 가능한 유효범위

함수 내에 선언된 변수, Local Variable

변수가 선언된 블록에서만 유효한 변수

함수가 시작 시 생성, Stack에 생성

함수가 종료되면 변수도 소멸

초기화 전 쓰레기 값을 가지고 있음

매개변수도 지역변수

유효범위

- 변수가 선언된 블록에서만 유효

- 함수 시작 시 생성되고 종료 시 소멸

- 생성 시 쓰레기 값을 가짐

- 매개변수도 지역변수임

- 블록 내에서 변수 선언이 가능(C99)

- 선언된 블록에서 유효

 

2. 전역변수

프로그램 내 전체 함수에서 유효, Global Variable

프로그램 시작 시 생성, 데이터 영역에 생성

프로그램 종료 시 소멸

함수 밖에서 선언

자동으로 0으로 초기화

전역변수는 프로그램 전체에서 참조하므로 복잡성을 증대

모듈화의 독립성 확보가 어려움

메모리 공간의 점유

다중 파일

- extern을 선언하여 외부에서도 참조 가능