brunch

매거진 코딩 학습

You can make anything
by writing

C.S.Lewis

by 스스로 코딩 두셀코 Nov 16. 2020

[코딩의 기초] 변수(2)

변수의 종류

이전 글: https://brunch.co.kr/@doselfcoding/69


안녕하세요, 스스로 코딩 두셀코입니다.


지난 글에서 변수의 개념에 대해서 배웠는데요, 지난 글의 내용을 요약해보면, 변수는 코딩을 할 때 사용되는 재료로 어떤 값이라도 들어갈 수 있는 빈칸이고, 상수는 특정 값이 정해지면 바꿀 수 없는 값입니다. 이번 글에서는 변수의 종류에 대해서 배워보도록 하겠습니다.




변수에도 종류가 있다고?


지난 글에서 변수는 어떤 값도 가질 수 있는 빈칸이라고 설명을 드렸는데요, 이 말이 사실 100% 사실은 아닙니다. 이게 웬 뚱딴지같은 말인가 싶겠지만, 정확히 얘기하면 변수에는 모든 값이 들어갈 수 있는 것이 아니라 변수의 종류에 맞는 값만 들어갈 수 있습니다. 갑자기 변수에도 종류가 있다고?라고 생각하실 수 있지만 쉽게 이야기하면 아래와 같습니다.


지난 글에서 들었던 스펀지 예시를 다시 들어보겠습니다.


잠시 아래 빈칸에 어떤 정답이 들어갈지 5초만 생각해볼까요?

빈칸이 코딩에서의 변수라고 볼 수 있다.

여기서 빈칸에 들어갈 정답은 어떤 것을 생각하셨나요? 예를 들면 '잠을 잔다', '으르렁거린다', '화를 낸다' 이런 정답을 생각하셨나요?


위에서 추측한 정답들의 공통점은 무엇인가요? 바로 서술어라는 것입니다. 즉, 빈칸에 들어갈 수 있는 정답 후보들은 '잠', '으르렁', '화'와 같은 명사나 '잠을 자는', '으르렁거리는', '화를 내는'과 같은 형용사 또는 1,2,3,4와 같은 숫자가 들어갈 수 없는 것입니다. '사자가 청국장 냄새를 맡으면 15다.'를 생각하신 분들이 계신가요? 아마 없으실 것이라 믿습니다. 여담으로 정답은 '웃는다'입니다.


왜 그런 것들은 정답 될 수 없었을까요? 너무나 당연한 이야기지만, 칸은 서술어만 올 수 있는 자리이기 때문입니다. 이와 같이 변수도 종류가 여러 가지가 있고, 코딩을 할 때 변수도 각각의 종류에 맞게 써야 합니다. 변수를 사용할 때는 항상 변수의 종류를 인지하면서 사용해야 하고, 만약 이 규칙을 무시했을 때는 예상치 못한 에러가 발생할 수 있습니다.


즉, 어떤 프로그래밍 언어로 코딩을 하든지, 기본적으로 변수의 종류에 대해서 인식은 하고 있어야 합니다. 그러면 변수의 종류에는 어떤 것이 있을까요? 분류하는 방법은 다양하지만, 여기서는 '기본'과 '확장' 두 가지로 분류하도록 하겠습니다.


[더 알아보기]

변수의 종류를 몰라도(?) 되는 프로그래밍 언어

C언어와 자바와 같은 프로그래밍 언어들은 변수를 선언할 때 변수의 종류를 지정해줘야 합니다. 하지만, 파이썬과 자바스크립트와 같은 스크립트 언어들은 변수의 종류를 지정하지 않아도 됩니다! 이들은 코드를 수행할 때, 어떤 종류인지 값을 보고 알아서 판단을 합니다. 이게 사용할 때는 편한 측면 있지만, 코드의 가독성이나 예측 가능성 생각하면 불편할 때도 있습니다. 좋은 점이 있으면 안 좋은 점도 있는 것이 코딩의 세계입니다 :)



기본적인 변수의 종류


기본적인 변수의 종류는 'primitive data type' 이라고도 불립니다. 있는 그대로 해석하면 '원시적인 변수의 종류'라는 것입니다. 왜 원시적이라고 할까요? 프로그래밍 언어를 개발하고 그것을 해석하는 컴파일러라는 것을 만들었을 때, 가장 기본적으로 분류했던 변수의 종류들이어서 그렇게 부른다고 생각하시면 됩니다. 기본적인 변수의 종류라고 부르는 만큼 딱 정해져 있고, 더 추가되거나 빠지는 것은 없습니다. 이 말은 반대로, 확장된 변수의 종류는 딱 정해져 있는 것은 없고, 입맛대로 만들 수 있는 변수의 종류라는 것을 알 수 있겠지요?


기본적인 변수의 종류에는 정수형, 실수형, 문자형, 주소형 이렇게 4가지가 있습니다. 더 깊게 들어가면 복잡하기 때문에 이렇게 4가지가 있다고 보시면 됩니다. 정수형, 실수형, 문자형 이름만 보면 덜컥 어렵구나 생각이 드실 수 있지만, 걱정하지 마세요. 정수형에는 -100, -50, 0, 1, 10, 100 이런 숫자들이 들어갈 수 있는 것이고, 실수형에는 0.1, -34.5, 92.7과 같은 수가 들어갈 수 있는 것이고, 문자형은 A, B, C, a, b, c와 같은 문자 (한 글자)가 들어갑니다. 주의할 것이 문자열 ('ABCDEFG') 이 아니라 알파벳 하나입니다. 마지막으로 주소형이 있는데요, 이 친구는 '포인터'라는 개념을 알아야 하기 때문에, 이런 것이 있구나 라고 넘어가고 '포인터'를 다룰 때, 추후에 다루도록 하겠습니다.


변수의 종류에는 그에 맞는 값들이 들어가야 합니다.


[더 알아보기]

변수의 선언과 초기화

변수의 선언은 변수를 만들겠다! 앞으로 사용할 거다!라고 표현하는 것입니다. 변수의 선언을 하기 위해서는 변수의 종류와 변수의 이름 그리고 초기값을 정해줘야 합니다. 즉, 상자를 만들고, 상자에 무엇이 들어갈 수 있을지 정하고 마지막으로 상자 안에 무언가를 넣어주는 과정이라고 볼 수 있습니다. 여기서 변수의 종류와 이름을 지정하는 것은 변수의 선언이라고 부르고, 초기값을 정해주는 것을 초기화라고 부릅니다.




확장된 변수의 종류


기본적인 변수가 정수형, 실수형, 문자형 그리고 주소형 이렇게 3가지가 있다면 확장된 변수의 종류는 이것들은 요리조리 잘 조합한 것이라고 볼 수 있습니다. 예를 하나 들어볼까요?


우리가 문자형 변수를 하나 만들어서 'A'라는 문자를 넣을 수도 있지만, 평생 이렇게 한 글자만 가지고 코딩을 하면 괴롭겠죠? 왜냐하면 우리가 살아가는 세상은 'Apple'이라는 단어를 쓸 수도 있고, 'Apple is a company, not a fruit'이라는 문장을 쓸 일이 많기 때문입니다.


이런 경우에는 문자형 변수를 쭉 이어 붙입니다.


문자형 변수를 여러 개 이어 붙이면 문자열 (문자로 된 배열) 변수를 만들 수 있습니다.


이렇게 되면 여러 개의 문자를 저장되어 결국 문장을 저장할 수 있는 변수를 하나 만들 수 있게 됩니다. 이런 것이 확장된 변수의 종류의 한 예시입니다. 추가로, 이런 변수의 종류를 배열이라고 부르고, 배열은 기본적인 변수를 연결한 것을 표현하기 위한 확장된 변수의 한 종류라고 정의할 수 있습니다.


또 다른 예로, 우리들은 코딩으로 '사람'이라는 변수를 만들 수 있습니다. 상자를 만드는데 사람만 들어갈 수 있는 상자를 만드는 것이지요.


사람만 들어갈 수 있는 변수를 만들 수 있다.


그러면 이것은 기본적인 변수의 종류 중 하나로 표현할 수 있나요? 사람은 정수형도 아니고, 실수형도 아니고, 문자형도 아니기 때문에 불가능합니다. 그래서 새로 사람이라는 변수의 종류를 정의할 수 있습니다.

'사람'이라는 변수 종류는 나이, 성별, 키, 몸무게 이런 속성들을 가지도록 정의를 해봅시다. 여기서 각각의 속성들은 위에서 배운 기본적인 변수의 종류 중 하나로 표현할 수 있나요? 이름은 나이는 정수, 성별도 문자형 (남자면 M, 여자면 F), 키와 몸무게는 소수점까지 나올 수 있도록 실수형 이렇게 변수의 종류를 정해줄 수 있겠죠? 조금 더 나아가 보면 이름도 넣으면 좋으니까, 위에서 배운 '배열'을 사용해서 이름도 넣어볼 수 있습니다.

기본적인 변수의 종류들을 조합해서 확장된 변수를 만들 수 있습니다.

이렇게 하면 '사람'이라는 확장된 변수의 종류를 만들 수 있습니다. 이것을 다른 말로 구조체(C언어)라고 부를 수 있고 비슷한 개념으로는 클래스(자바, 파이썬 등)라고 부르는데, 추후에 더 자세히 다루도록 하겠습니다. 이런 식으로 확장된 변수는 무한대에 가깝게 많은 변수의 종류들을 입맛대로 만들 수 있습니다. 만약에 변수의 종류에 맞지 않는 값을 넣으면 어떻게 될까요? 당연히 에러가 발생합니다. 사람이 들어갈 변수인데, 동물을 넣는 것과 같은 것이고, 숫자가 들어가야 하는데, 문자를 넣는 것과 마찬가지인 것이죠.




정리하면 변수는 변수의 종류가 있고, 크게 보면 기본적인 종류와 확장된 종류 2가지가 있다고 볼 수 있습니다. 기본적인 종류는 다시 4가지로 나뉠 수 있는데, 정수형, 실수형, 문자형 그리고 주소형이 있습니다. 확장된 종류는 기본적인 변수들을 조합해서 만든 변수의 종류로 이 글에서 배운 것은 대표적인 확장된 변수의 종류인 배열과 구조체/클래스가 있습니다. 기본적인 변수들을 조합하는 방법은 무한하기 때문에 확장된 종류는 무한대에 가깝게 만들 수 있다고 볼 수 있습니다. 이다음에는 실습에서 각 프로그래밍 언어별로 어떻게 표현되는지 보고, 그 다음 주제인 조건문에 대해서 알아보도록 하겠습니다.



매거진의 이전글 [실습 준비] 구름 IDE
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari