관심쟁이 영호

[C언어기초 #5.0] 변수 마스터하기!ㅣ전역변수ㅣ지역변수ㅣ매개변수ㅣ인수 본문

학교공부/C언어의 왕!

[C언어기초 #5.0] 변수 마스터하기!ㅣ전역변수ㅣ지역변수ㅣ매개변수ㅣ인수

관심쟁이 영호 2020. 2. 23. 21:13
반응형

안녕하세요!

최고왕입니다.

 

요새 앉는 자세가 꾸부정해서 그런지

몸 여기저기가 쑤시네요 ㅠ

 

그래서 바른자세로 유지하려고 노력 중이에요!

 

여러분들도 만약 쑤신다면 바른 자세 준비를 하시고!

그렇지 않다면 쑤시지 않게 바른 자세를 유지해줍시다.

 


오늘 여러분들께 알려드릴 내용은

변수의 심화과정이에요!

 

변수를 이전에는

하나의 상자라고 말씀드렸죠.

 

그 뜻은 여전하고, 이제는 거기에서 더 나아가

지역변수, 전역 변수, 매개변수, 인수에 대해서 공부를 해볼 예정이에요.

 

가장 먼저 알아 두어야 할 것.

변수의 심화과정을 알기 전에, 꼭 알아 두어야 할 내용이 있어요!

어떤 내용이냐면 메모리에 관해서 알아두는 것인데요.

 

여러분들이 변수를 선언해주고 초기화를 해주게 된다면

컴퓨터는 그러한 데이터를 메모리(RAM)에 저장하게 돼요.

 

그것을 시각적으로 표현해보자면.

 

 

이런 메모리에 변수를 지정하면!

 

int sample = 12345;

 

이런 식으로 저장이 됩니다!

 

그리고 여기서!

sample이라는 변수가 메모리에 저장되어 있는 공간에도

주소가 있어요!

 

이것을 2진수, 10진수, 16진수 등등 갖가지의 방법으로 표현을 하는데!

어쨌든..

sample이라는 변수는 메모리의 어떠한 공간에 저장되어 있고, 그 공간은 각각 주소가 정해져 있다!

라고 생각하시면 될 것 같아요 ㅎㅎ

 

 

지역변수?

사전적 의미를 먼저 보시면

 

프로그램 언어에 있어서 변수가 어떤 블록 내에서만 선언되지 않을 때에는 다른 블록에 그것을 사용하는 것은 불가능하며, 프로그램 내 전체에 걸쳐 사용할 수 없다.

(네이버 지식백과)

 

이렇게 사전에서 나와있어요!

 

이것을 좀 더 쉽게 풀어서 설명해드릴게요.

먼저 코드를 작성해봅시다.

 

 

local이라는 함수를 새롭게 만들어서 그 함수 블록 안에 a라는 변수를 선언하고 10이라는 정수를 초기화해주었어요!

 

그리고 메인 함수 내에도 a라는 변수와 1이라는 정수를 초기화했어요.

 

아직까지는 정확한 이해가 안 되실 수도 있으니 조금만 더 손 볼게요!

 

먼저 코드를 천천히 보시면서 각 출력문에 어떤 값들이 나올지 예상을 해보세요!!

 

 

먼저 풀어써드리면!

 

local이라는 함수 내에서 a라는 변수를 선언해주고 초기화해주었고요!

 

main함수 내에서 a라는 변수를 다시 한번 선언해주고 초기화했어요!

 

그리고

출력을 총 3번 했어요

 

첫 번째 호출: 메인 함수에서 a변수 선언 후 출력

 

두 번째 호출: local함수 내에서 a변수 선언 후 출력

 

세 번째 호출: local함수 호출 후 출력

 

이렇게 생각하실 수 있어요!

"메인 함수의 a를 local함수에서 10으로 새롭게 초기화했으니까! local함수 호출 후의 a는 10이라는 값을 가질 거야"

라고 생각하실 수 있어요.

 

그럼 결과를 볼게요!

 

흠..

 

결과는 다르네요!

local함수를 호출한 후에도 a값은 1로 계속 유지가 되고 있어요 ㅠㅠ

 

이유는 무엇일까요..?

 

지역변수

이유는 지역변수로 해답을 찾을 수가 있어요!

 

사실 컴퓨터는

블록 블록 사이에 공간을 따로 취급해요!

 

 

컴퓨터는

1번 블록과 2번 블록에서의 데이터를

각각 따로 처리를 합니다!

 

a라는 변수 이름이 겹치더라도 각 블록에서는 따로따로 메모리에 저장이 돼요!

 

이것을 각 지역 지역마다 따로 관리를 한다고 해서

지역변수라고 합니다.

 

그래서 조금만 더 생각을 해보면!

 

local함수 내에서 a를 선언하지 않고

 

a를 출력하게 된다면

 

local함수 입장에서의 a변수는 영문도 모르는 변수가 되는 겁니다!

 

전역 변수

전역 변수는 함수 블록 내에서 선언하지 않고 모든 블록의 밖에서 선언하는 것이에요!

그래서 값을 공유를 해요!

 

이 코드도 천천히 보시면서 생각을 해주시기 바랍니다!

 

b라는 변수도 10이라고 모든 블록 외에서 선언을 해주었어요!

 

그리고 각각 자리에 출력을 해주었습니다.

 

 

출력했을 때 값은 이렇게 나와요!

 

메인 함수에서 새롭게 b를 선언해주기 전에 b의 값을 출력했을 때는

 

b = 10이라고 전역 함수에서 선언했던 거와 같이 나왔어요!

 

전역 함수가 메인 함수에 영향을 주었다는 소리죠!

 

하지만

 

좀 더 자세히 들여다보면

local함수에서 새롭게 선언을 해주어도

main함수에 돌아왔을 때는 main함수에서 선언해주었듯이 1이라는 숫자가 나와요!

이건 앞서 설명해드린 것과 같은 원리입니다!

 

한마디로

main함수든 local함수든 맨 처음에 b라는 값은 10으로 공유가 된다고 생각하시면 됩니다.

 

※주의할 점 :

전역 변수는 잘 안 쓰시는 것을 추천드려요. 나중에 실무에서 코딩을 하게 되다 보면 기본 200줄 이상이 되는데,

많은 변수를 할당하고 다루게 될 때 전역 변수를 사용해버리면

값이 혼동되고 엄청나게 손이 많이 가는 작업이 될 테니까요 ㅠㅠ

 

인수, 매개변수

인수와 매개변수는 비교적 쉽습니다!

위쪽 코드에서 살펴보면

 

메인 함수에서 함수를 호출할 때, 전달해주어라! 하는 값은 인수라고 불러요 ㅎㅎ

 

그 값이 전달되고

local함수에서 이런 어떠한 값이 넘어올 건데, 그것을 int a라고 선언된 변수에 넣어라! 이렇게 처리를 하는데요.

 

그때 넘어오는 이런 어떠한 값이 매개변수라고 합니다.

 

local함수에서 int a라고 굳이 선언을 하지 않아도 돼요!

왜냐면 local함수로 넘어왔을 때 a라는 변수는 main과는 별개로 아무 상관없는 값이니까요.

 


엥 왜 갑자기

 

변수에 대해서 더 심화적으로 공부하는 걸까?

 

라고 생각하실 수 있는데

 

다음 시간에는 c언어의 극강 무기인

 

포인터에 대해서 공부할 예정이에요!

 

그 포인터를 공부하기에 앞서서

 

먼저 알아야 할 기초지식입니다!

 

포인터는 반드시 알아두어야 할 개념이고,

 

실무에서도 엄청나게 많이 활용하면서 엄청나게 유용한 기능이라고 보시면 돼요!

 


열심히 머리 굴려서 써봤는데

 

여러분들이

 

이해를 하셨으려나 모르겠어요 ㅠㅠ

 

혹시나 이해가 안 되는 부분이 있거나

 

틀린 부분이 있다면

 

꼭꼭 댓글로 말씀해주시면 감사하겠습니다.

 

공감 버튼 한 번씩만 눌러주시면

 

이 최고왕에게 너무나도 힘이 됩니다!

 

여러분 항상 건강하시고 바라는바 이루세요!

 

이상 최고왕이었습니다.

300x250
Comments