본문 바로가기
C++/기초

C++ 기초 : 변수 / 함수 (1)

글: 시플마 2024. 2. 18.

변수의 종류는 크게 네 가지가 있습니다.

지역 변수, 전역 변수, 정적 변수, 외부 변수가 있죠.

 

이 중 지역 변수와 전역 변수에 대해 알아봅시다.

 

 

 


 

 

 

 

지역 변수는 중괄호(함수) 안에 선언된 변수입니다.

지역 변수는 같은 중괄호 내에서만 사용할 수 있습니다.

int main()
{
	int num = 0;	//지역 변수
    
	return 0;
}

 

위 코드에서 "int main()"이 바로 함수입니다.

main 함수는 중괄호 두 개로 이루어져 있습니다.

이 중괄호 사이의 int형 변수 num이 선언되었습니다.

 

이 변수 num이 바로 지역 변수이며 num은

중괄호 내에서만 유효하기 때문에

main 함수를 벗어난 곳에서 사용할 수 없습니다.

 

 

이러한 점으로 인해 재밌는 현상이 발생합니다.

 

main 함수 안에 

같은 이름을 가진 지역 변수를 선언하면 어떻게 될까요?

 

같은 이름의 변수를 두 개 선언했더니 오류가 발생합니다.

 

컴파일러는 변수 num에 100을 대입하라는 

명령을 해도 위에 있는 num에 대입하라는 건지,

아래 있는 num에 대입하라는 건지 알 수 없습니다.

모호한 부분이 생기기 때문에 오류가 발생하는 겁니다.

 

 

이번에는 아래 선언한 변수 num을 중괄호 사이에 넣어 

main 함수의 지역 변수가 아닌

main 함수 안에 존재하는

또 다른 지역 변수로 선언하였습니다.

 

이때는 오류가 발생하지 않습니다.

 

컴파일러가 "num;"이라는

코드를 만났을 때, 어느 쪽 num을 의미하게 될까요?

 

위에 있는 num을 의미하게 됩니다.

 

왜냐하면 아래 있는 num이 선언된 

중괄호 밖에 코드가 있으므로 

같은 지역에 존재하는 num을 의미하게 되는 것입니다.

 

 

그렇다면 아래와 같은 코드는 어떻게 될까요?

 

여기서 "num;"은 어느 쪽 num을 의미하는 걸까요?

같은 지역에 있는(같은 중괄호 안에 있는)

num을 의미하는 것이겠죠.

 

지역 변수는 같은 지역에 있는 것을 우선순위로 둡니다.

 

 

 


 

 

 

 

 

 

전역 변수는 중괄호(함수) 외부에 선언된 변수로,

어디에서든 사용할 수 있다는 특징이 있습니다.

 

 

 

전역 변수로 선언된 변수 global은 

main 함수에서도,

main 함수 내의 또 다른 지역에서도 

대입 연산이 잘 작동하는 것을 볼 수 있습니다.

 

그러나

main 함수 내의 또 다른 지역에서 선언된 

변수 num은 같은 지역에서는

대입 연산이 잘 작동하지만,

해당 지역을 벗어나자마자

대입 연산이 작동하지 않는 것을 확인할 수 있습니다.

 

 

 

 


 

 

 

 

공장에 로봇 팔과 컨베이어 벨트가 있다고 합시다.

 

컨베이어 벨트 위에는 일반 쿠키가 나란히 놓여 있고,

쭉 가다가 1초 동안 멈춘 후 다시 움직이는 동작을 수행합니다.

 

로봇 팔은 일반 쿠키를 들어올려 반대쪽 상자에 옮기는 동작 수행합니다.

 

이러한 작은 기능들이 모여 큰 시스템을 구성합니다.

 

이 기능을 코드로 표현하게 되면 이것이 바로 함수입니다.

 

함수를 구성할 때 모듈화(Module)를 잘해야 합니다.

즉 기능 분할을 잘해야 합니다.

 

무슨 말이냐면,

위 예시에서 로봇 팔은 쿠키를 집는 동작 하나와

반대쪽 상자로 옮기는 두 가지 동작을 합니다.

이 두 가지 동작을 하나의 함수에 넣어 작동하게 만들었습니다.

 

그런데 크림 쿠키를 만들기 위한 다른 로봇 팔은

쿠키 두 개가 겹쳐진 상태로 컨베이어 벨트를 통해 로봇 팔 앞에 오면

로봇 팔은 위에 있는 쿠키를 들어올려

크림을 넣고 다시 내려놓는 동작을 수행합니다.

 

크림 쿠키를 위한 로봇 팔이 필요한 동작은

'쿠키를 들어올리는 동작'입니다.

 

그러나 기존 함수는 쿠키를 들어올리고

반대쪽 상자로 옮기는 기능을 하나의 함수에 넣었기 때문에

쿠키를 들어올리는 함수를 분리하거나 따로 만들어 주어야 합니다.

 

애초에 모듈화를 잘해서 각각의 기능으로 분리하여

함수를 구성하였다면 문제가 발생하지 않았을 것입니다.

 

 

그럼 함수를 코드로 표현해 볼까요?

 

int형으로 값을 반환하는 함수 Add를 만들었습니다.

 

함수 Add는 int형 값을 두 개 받고

이 두 개의 값을 더한 후 int형 값으로 반환하고 있네요.

 

main 함수에서 

Add 함수에 100과 200, 두 개의 값을 보냈고

Add 함수는 100과 200을 받아 더해 300을 int형으로 반환합니다.

반환된 값인 300을 int형 변수 number에 대입합니다.

 

 

 

강의 출처 : https://www.youtube.com/watch?v=PFc4g8mxOiI&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&pp=iAQB