([C언어] 20강) static과 const
이번 강좌에서는 static과 const
스태틱과 콘스트를 배워볼건데요
스태틱과 콘스트는 뭘까요?
자 첫번째 static부터 배워보도록 하겠습니다.
static과 const는 모두 변수나 함수 등을 꾸며주는 건데요
그중에 static은 고정! 이라는 뜻을 가지고있죠
우선 다음 코드를 보시죠
#include <stdio.h>
int test()
{
static int a = 0;
printf("%d", a);
a = 3;
}
int main()
{
test();
test();
}
이 코드를 실행하면 어떻게될까요?
00이 출력될것같죠? 아닙니다.
static은 고정이라는 뜻, 즉 test함수가 처음 실행될때 static변수인 a가 생성되고 0으로 할당됩니다.
그리고 static변수는 다른 일반 지역변수와 달리 해당 함수가 종료되어도 제거되지 않습니다.
static int a = 0;이라는 줄을 만나는 순간
test함수의 a변수는 앞으로 이거야! 라고 알려주고 다음 실행부터는 a가 이미 있으니 생성하지않습니다.
test함수에 a변수를 '고정' 해버리는거죠
test함수가 처음 실행됐을때는 static변수인 a가 0으로 생성되고 출력 되고
a = 3; 이라는 줄을 만나 a가 3이됩니다.
test함수를 한번 더 호출하면 a가 이미 존재하므로 새로 만들지 않고,
a의 값, 즉 3을 출력하고
다시한번 a에 3을 할당하고 종료합니다.
이렇게 말이죠! 이해 되셨나요?
static변수는 함수가 종료될때가 아닌 프로그램이 종료될때 제거된다는 점 꼭 기억해두세요!
자 그럼 이번에는 const변수를 알아보도록 하겠습니다.
const도 static과 사용법은 같습니다만, 기능이 다릅니다
const는 '고정' 이라기보다는 '절대' 라고 표현하는게 좋을것같네요
const는 static과 달리 일반 지역변수처럼 함수가 종료될때 데이터가 제거됩니다.
그럼 const의 기능은 뭘까요?
아래 코드를 보시죠!
#include <stdio.h>
int main()
{
const int a = 3;
a = 5;
printf("%d",a);
}
이렇게 하면 어떻게 될까요?
당연히 5라고요?
한번 직접 쳐볼까요?
어? 빨간줄이 그어지네요? 왤까요??
const는 해당 변수가 "절대" 값이 바뀌지 않도록 도와줍니다.
그래서 "절대"라고 소개를 한거죠
왜 필요한걸까요? 만약에 제가 게임을 만드는데
게임의 해상도를 무언가를 계산하는데에 쓰고싶다고 칩시다.
게임의 해상도가 720 * 1280이라고 쳤을때 제가 계산을 위해서
int width = 720;
int height = 1280;
이렇게 해놨습니다
해상도를 통해서 이것저것 계산을 하는 도중에 제가 실수로라도 width와 height변수를 건드리면
계산이 꼬여버리겠죠? 게임의 해상도는 변하지 않을텐데 말이죠..
그래서 이 값은 변하지 않을거라고 내 자신과 약속할수있다! 라고 생각 되는값을 const로 선언해놓으면
나중에 그 나 자신과의 약속을 잊고 그 값을 바꾸려고 해도 빨간줄이 그어지는거죠.
참고로 static은 지금은 많이 안쓰이겠지만, 나중에 C++, C#같은 언어로 넘어가면서는
함수에도 static을 쓰고 꽤 자주 사용하게됩니다. 꼭 외워주세요
오늘 강의 여기서 마치도록 하겠습니다! 열공하세요~