하아찡

변수란? 본문

C++/기본문법

변수란?

하아찡 2024. 12. 2. 17:29

프로그램을 배우면 거의 처음부터 나오는 변수는 무엇일까?
 
말 뜻 그대로 보자면 변하는 수입니다.
하지만 여기서 우리는 프로그램을 공하는 입장에서 더 풀어서 적어보자면, 변하는 수를 저장하는 공간 입니다.
 
자 여기서 변하는 수? 오케이 공간? 오케이 근데 어따씀?
처음 공부를 하면 도대체 어디서 써야할지 하나도 감이 안옵니다. 처음 공부할땐 간단하게 생각합니다. 일단 다 만들고 봐요. 그러고나서 점점 하다보면 비효율 적이다 생각이 들때 다시한번 생각해보면 변수를 꼭 필요한 곳에서만 사용하게 됩니다.
간단하게 예를 들어보겠습니다.
예를들어 "50이라는 숫자를 저장하고싶고, 100이라는 숫자를 저장하고 싶어" 라고 했을때 50이라는 숫자와 100이라는 숫자를 동시에 가지고 있어야하는 상황입니다. 이럴땐 변수를 두개를 생성해서 저장을 합니다.
 
다른 예를 들어보면 "50이라는 숫자를 저장하고 그다음 100이라는 숫자를 저장하고 싶어"라고 했을땐 말이 애매하긴 하지만 위에서는 두개의 숫자를 동시에 가지고 있어야 하는 상황이였는데 현재는 50을 저장했다가 100을 저장하는 상황인데 이럴땐 굳이 변수를 두개를 생성을 해야할까?  이럴땐 굳이? 2개를 생성할 필요 없이 한개만 생성해서 50을 저장했다가 100을 저장을 하면 됩니다.
자 그러면 다르게 생각해 봤을때 50을 저장했다가 100을 저장하면 저 공간(변수)은 50이라는 숫자와 100이라는 숫자를 두개를 가지고 있을까?
 
정답은 아닙니다.
컴퓨터에서 빌리는 공간(변수)은 하나의 공간에는 하나의 값만 저장을 할 수 있습니다.
 
그러면 기존에 저장됐던 50이라는 값은 어디로 갔을까?
어디로 가지도 못하고 덮어 씌워집니다. 기존에 50을 가지고 있던 공간이 100으로 덮어 씌워지니 기존에 있던 값은 사라지고 100이라는 값만 남게 되는 방식입니다.
 
그러면 정리해보면 하나의 변수에 여러개의 값을 저장하지 못하니 동시에 값을 가지고 있어야하면 그만큼 변수를 생성해야 하고,
굳이 동시에 가지고 있지 않으면 여러개를 만들 필요가 없이 공간을 계속 덮어 씌워가면서 사용을 할 수 있습니다.


 
자 근데 여기서 강조했던게 있습니다. 변하는수공간을 강조했습니다.
왜 변수를 말하는데 두가지를 말을 했을까요? 여기서 공간도 많이 중요합니다.
우리가 컴퓨터에게 저장할 공간을 빌리는데 컴퓨터한테 요청을 하는거에요. "ㅁ모양 공간을 빌려줘, ㅇ모양 공간을 빌려줘" 이런식으로 컴퓨터에게 전부다 알려줘야합니다. 그러면 컴퓨터는 해당 모양이 맞는 공간을 빌려주게 됩니다.
 
근데 왜 공간모양이 다달라? 그냥 같으면 안돼?
참 같으면 얼마나 편했을까요...
 
일단 하나씩 생각을 해봅시다.
사실 컴퓨터는 계산을 무지하게 빠르게 해주는 착하고 멍청한 친구입니다.
그 계산이 엄청나게 빨라서 그렇지요...
근데 여기서 계산은 무엇을 계산을 할까요? 어떤 수와 어떤수를 계산을 하게되겠죠?
우리가 아는 수는 과연 뭐가 있을까요? 무수하게 많은 수중에서 우리는 정수실수를 사용하겠습니다.
 
자 벌써보면 우리는 수를 정수실수로 두가지로 나눴어요!
이걸 컴퓨터에게 전부다 알려줘야해요. 우리가 정수인 공간을 빌릴껀지, 실수인 공간을 빌릴껀지를 알려줘야해요. 
왜? 컴퓨터는 착하지만 멍청한 친구이기때문에 하나하나 알려줘야한답니다.
 
그런데 우리가 생각할땐 정수랑 실수 둘다 숫자아니야? 라고 생각하실 수 있습니다. 하지만 컴퓨터가 바라보기엔 서로 모양이 다르다고 생각하시면 됩니다.(메모리크기가 다르던지, 저장방식 및 연산방식이 다르던지, 정화도가 다르던지 주저리주저리...)
 
그러면 우리는 크게 정수와 실수로 공간이 나눠졌다고 볼 수 있습니다.

정수실수

 
간단하죠? 하지만 여기서 끝이 아닌걸요... 그래도 어렵지 않아요
 
공간별로 크기가 또 달라요.
일단 정수부터 아래표를 확인해 보시죠

자료형크기(공간의 넓이) 값의 범위
int4bytes-2,147,483,648 ~ 2,147,483,647
short2bytes-32,768 ~ 32,767
long4bytes-2,147,483,648 ~ 2,147,483,647
long long8bytes-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 
위와 같이 여러가지 모양의 공간이 있습니다.
이 여러지모양들은 각각의 이름이 있습니다. 
이제는 그 이름을 지칭하는 명칭은 자료형 이라고 하겠습니다.
자 근데 자료형은 그 공간의 종류인건 알겠어. 근데왜 넓이들이 달라? 같은것도있는데 왜 다르게 구분해놨어?
(그 시대를 살아왔던게 아니지만 예전엔 16bit시스템이였던 시절이 있고 32bit 시절이 있고 64bit시절이 있었으닌깐 구시대 잔여물같은 느낌이죠... short는 좀더 작은 정수를 지칭할때 사용을 했을꺼고.. int는 2byte시절에서 4byte로 변경이 됐고... long은 16bit시절 4byte였다가 현재도 4byte로 유지되고 있고 그냥 그렇다구용) 
공간의 크기를 지칭하는 byte는 밑에서 설명하겠습니당.
 
그러면 실수는?

자료형크기(공간의 넓이) 정밀도 및 범위
float 4bytes소수점 이하 약 6자리 정밀도
double 8byte소수점 이하 약 15자리 정밀도
long double double과 같음double과 같음

위 표처럼 실수는 나누어져 있습니다.
정수와는 다르게 실수는 정밀도라는 단어가나오는데
이게 가끔씩 유튜브 보면 0.1 + 0.1 == 0.2 (여기서 "=="은 컴퓨터에서 같냐라고 물어보는겁니다.)
은 맞냐 틀리냐 라고 나오는데 틀릴 수도 있다입니다. 
왜냐하면 잘라서 근삿값으로 저장하는데 그래서 정확도가 높은 실수가 필요할땐 더 높은 자료형을 선택해서 사용하시면 됩니다.
 
 
자그러면 이제 저 공간의 넓이는 byte는 무엇이냐?
컴퓨터는 사실 0과 1로 이루어져있다라는 말을 많이 들어보셨을 수도 있습니다.
0과 1은 다른말로 2진수 라고 말하는데 값을 표현할때 0과 1로 표현을 한다라는겁니다.
그러면 우리가 10이라는 숫자를 2진수로 표현을 할라면 어떻게 해야할까요?
 
예시로 아래 표를 하나 그려보겠습니다. 하나의 칸은 0과 1을 저장할수 있는 칸인데 그걸 8개를 가져왔습니다.

1286432168421
00001010

 
자 위에 표가 2진수로 10진수 10을 나타낸 값입니다. 
10진수 10을 2진수로 나열해보면 "00001010" 이라는 값이 나오게 되는겁니다. 이게 바로 컴퓨터가 바라보는 우리의 숫자 10인겁니다.
 
근데 왜 byte를 설명하다가 이런 이상한 소리를 하고있냐 라는건데
 
저기 테이블에 있는 한칸 한칸을 이젠 bit 라고 표현하겠습니다.
하나의 bit에는 경우의 수가 2개밖에 존재하지않는데
만약 2개의 bit은 경우의 수가 몇가지가 생길까요? 4가지가 생기게 되죠 값은? (0, 1 , 2 , 3)
만약 3개가 되면? 경우의수는 2배가 늘어 8이 되고,
만약 4개가 되면? 경우의수는 또 2배가 늘어 16이 되고......
이런식으로 값을 표현할수있게 됩니다.
그러면 bit라는것도 알겠어 그럼 이젠 진짜 byte는 뭔데?
 
byte는 1bit가 8개 모이면 1byte가 됩니다. 즉, 1byte = 8bit와 같다.
그럼 정수의 자료형을 보면 4byte는 1bit가 32개모여서 나오게 된겁니다.
(옛날에 게임을 좀 하셨던 분들은 " 2,147,483,647 " 이숫자가 눈에 익으신분들이 있으실텐데...? 공간의 최대값을 사용해서 쓴겁니다.)
 
이제 보면... 이상한것들이 보일거에요... 4byte는 2^32인데 왜 21억까지밖에없지..? 라고 생각하셨으면 호기심이 강하시군요!
간단하게 설명하자면 맨 앞 비트는 양수인지 음수인지 확인하는 bit라고 생각해주시면됩니다. 좀 더 자세하게 알고싶으시다면 아래 블로그를 확인해주세용~(나중에 추천드려용~)
https://blog.hexabrain.net/367

번외. 컴퓨터에서 음수를 표현하는 방법

컴퓨터는 0과 1의 이진수만 이해할 수 있는데, 이런 컴퓨터 세계에선 음수를 어떻게 표현할까요? 컴퓨터에서 음수를 표현하는 방법은 부호 절댓값 방식(signed magnitude), 1의 보수, 2의 보수와 같이

blog.hexabrain.net

 
그리고 또하나의 궁굼점! 그냥 크게 공간을 가지면 좋은거 아닌가 많으면 많을수록 좋은거지! 모자란것보단!!
사실 맞아요... 모자란것보단 넉넉하게 있는게 좋죠... 
하지만 다르게보면 전혀 쓰지 않을 공간인데 먼지만 쌓이게 두는것보단 효율적으로 쓰는게 좋겠죠..?
그래서 공간의 크기가 나눠져있답니다.
(요즘같이 고 메모리시대! 라고하면 웃겠죠... 메모리가 적었던 시절도 있었답니다. 극한의 효율을 찾았어야하는...)
 
하나 예를 들어볼게요
내가 어떤 숫자는 죽어도 65000값을 넘지 않을거면 4byte보단 2byte를 사용하는게 좋지않을까요?
 
자 여기까지가 우리 자료형인 공간을 설명했습니다. 두서없이 적긴했지만 심심할때 한번씩 읽어보면 나쁘진 않을거같아용.


 
마지막 변수명은 뭘까?
 
이건 정말 간단합니다.
우리가 위에서 봤던 변하는 수를 저장했던 공간 누구에게 빌렸습니까? 바로 컴퓨터에게 빌려달라했습니다!
컴퓨터가 너무너무 똑똑하면 내가 빌려줬던 공간을 달라하면 될거같지만 그게 안되다보니 우리가 그 빌려받은 공간의 이름을 지어줍니다.
어떻게 지어주냐
 
자료형 변수명;
 
간단하죠? 그러면 우리는 이제 변수명만 부르면 컴퓨터가 그 변수명 공간에 있는 값을 가져다 줍니다!
참 쉽죠!
 
하지만 알아야 할점이 많습니다. 외울 필요는 없어요.
컴퓨터 프로그램을 배우시다보면 예약어라던지 이미 어디서 쓰고있는 이름이라던지 그런걸로 변수명을 지으실경우엔 사용하실 수 없습니다.
그리고 이름을 지을때 숫자먼저 나오면안되고...
문자나오고 숫자나오는건되고
대소문자를 구분하고...(A, a는 서로다른 변수명이다)
특수문자는 들어가면안되고.. 하나 예외는있고( "_" ) <- 이모티콘아님 언더바
등등등등 많습니다. 한번 찾아보세요. 검색하는것도 실력이랍니다. 구글없인 못살아~ 물론 chatgpt도 좋습니다. 근데 여태 공부하면 서 느낀점은 생각보다 검색으로 정보를 찾다 보면 예상치 못한 새로운 주제를 발견해 지식의 폭을 넓혀갈 수 있습니다~
 

반응형

'C++ > 기본문법' 카테고리의 다른 글

mutex  (1) 2024.12.26
접근제한자, 캡슐화  (0) 2024.12.16
오버라이딩, 오버로딩  (1) 2024.12.15
레퍼런스(참조자) 란?  (0) 2024.12.10