본문 바로가기
프로그래밍

컴퓨터는 중증 치매 환자? (ft. 변수)

by Good.PhD 2024. 11. 7.

치매? 컴퓨터가? 프로그래밍을 해보면 답답함을 느끼는 이유 중 하나. 내가 이전에 했던 일에 대해서 까맣게 모른다는 것이다. 그럴 수 있나? 컴퓨터한테 명령을 할 때는 '이 정보'를 '여기'에 기억해야 한다고 콕 찝어서 알려줘야 한다. 그렇게 하지 않으면 전혀 기억하지 못한다. '여기'에 기억해야 한다고 할 때 사용하는 것이 변수 (variable)이다. 변수에는 다양한 '정보'를 저장해두고 코드가 진행되는 과정에서 활용을 하게 된다. 이 변수에 내가 원하는 정보가 제대로 저장되어 있지 않으면 오류가 발생하는 상황이 생긴다.

수업시간에 생성AI를 이용해서 코딩을 알려주다 보면 학생들이 변수에 대한 개념이 없어서 당황하는 모습을 자주 접하게 된다. 코딩을 할 때 변수에 대해서 이해하는 것은 핵심중의 핵심. 그래서 학생들의 질문이 당황스럽기도 하다. 그래서 변수에 대해서 정리를 해보고자 한다. 변수에 값이 제대로 저장되어 있지 않으면, 컴퓨터가 중증 치매환자 처럼 느껴질 수 있다.

 

기억 (memory)을 한다는 건 무엇일까?

사람이 기억을 한다는 것은 우리의 뇌에 정보를 저장하는 것이다. 그리고 어떤 정보를 기억한다는 이야기는 뇌 어딘가에 저장된 그 정보를 다시 끄집어 내는 것을 말한다. 이전에 접했던 정보를 다시 불러오는 것을 기억이라고 할 수 있다. 컴퓨터는 어떻게 정보를 저장할까? 컴퓨터를 뜯어보면 하드디스크가 있고, 메모리가 있다. 하드디스크에는 우리가 장기적으로 보관하는 정보들이 저장된다. 예를 들면, 내가 어제 제작한 파워포인트 슬라이드나 엑셀파일 같은 것들이 그런 정보들이다. 반면에 메모리는 일시적으로 사용하는데 필요한 값들이 저장된다. 파워포인트로 슬라이드를 수정하다가 실수로 중요한 정보를 삭제한 경험은 아마 다들 있을 것이다. 그때 Ctrl + Z를 이용하면 삭제된 내용을 복원시킬 수 있다. 삭제된 값을 어떻게 다시 가져왔을까? 이전에 작성했던 내용이 컴퓨터 어딘가에 저장되어 있기 때문이다. 그래서 Ctrl + Z를 누르면 그 정보들을 다시 불러옴으로써 내가 했던 실수를 번복할 수 있다. 메모리에 일시적으로 내가 작성했던 내용들을 저장해뒀다가 복원해온다고 볼 수 있다. 이처럼 메모리에는 프로그램 사용에 중요한 정보들이 저장된다. 영구적으로 저장할 필요는 없지만 프로그램을 좀 더 효율적으로 사용하기 위해 일시적으로 저장해야 되는 정보들을 담아두는 곳이 메모리다.

 

변수랑 메모리랑 무슨 상관?

코딩에서도 내가 원하는 작업을 하기 위해서 일시적으로 내가 다루고 싶은 정보들을 계속 담아두는 곳이 필요하다. 메모리에 내가 원하는 정보를 잠깐 저장해놓고 코드가 실행되는 동안 계속해서 그 정보에 접근을 해서 처리를 할 필요가 있는 것이다. 변수가 바로 그러한 공간이다. 메모리 상에 내가 원하는 정보를 저장해둔 곳! 그곳을 변수라고 한다.

 

요즘 아이가 학교에서 구구단을 배우고 있다. 구구단 외우느라 고생이 많다. 단수가 올라갈 수록 어려워 하는데, 기억이 안 날때는 손가락으로 열심히 써보기도 하고 아니면 종이에 써가면서 곱셈을 한다. 변수에 정보를 저장한다는 것은 종이에 연필로 숫자를 쓰고 있는 것과 유사하다. 아래와 같이 직접 써가면서 구구단을 하고 있다. 종이에 연산 과정을 작성했을 때의 장점은 연산 결과의 일부를 저장하고 있기 때문에 그 다음 연산을 진행할 때 더 쉽고 빠르게 연산이 가능하다는 점이다.

종이에 써가면서 구구단을 외우는 중...

 

7 X 2 값을 알고 있으면, 7 X 3은 몰라도 쉽게 계산할 수 있다. 7 X 2에 다가 7을 한번 더 더해주면 되기 때문이다. 7 + 7 + 7을 전부 다시 계산할 필요는 없다. 변수가 이와 같다. 아이가 종이에 작성하지 않고 암산으로 7단을 외울 때는 굉장히 어려워 한다. 7 X 2 외우고, 7 X 3 으로 넘어간다. 7 X 3이 뭐였지?? 7 X 2 에 7을 더하면 되는데! 7 X 2는 뭐였지..? 이런 식의 상황이 생긴다. 기억이 안나기 때문에 계산이 안된다. 그러나 종이에 적으면 금방 해낸다. 코딩을 할 때도 정보를 불러와서 처리해야 하는 경우가 생기는데, 그때 필요한 정보를 변수에 저장해 둬야 효율적인 작업이 가능하다. 변수에 값을 지정하지 않으면? 그 정보는 그냥 사라져버린다. 그래서 중증 치매환자 같다. 조금 전에 계산한 건데도 기억을 못하니 말이다.

 

어디다 뒀더라...?

저장을 해뒀으면 내가 찾아와서 쓸 수 있어야 한다. 그래서 변수에는 이름이 붙게 된다. 변수의 이름만 알고 있다면 변수를 언제든지 불러올 수 있다. 아래 그림은 변수에 대한 예시다.

변수 예시

 

age에는 25가 저장되어 있다.

여기서 age는 변수의 이름이고, 변수에 저장된 값은 25라는 정수다. 메모리에 25라는 값을 저장해 두고 그 공간을 age라고 이름 붙여둔 것이다. 그래서 내가 25라는 값이 필요할 때는 age라는 단어로 그 값을 가져올 수 있게 된다.

 

name에는 Alice가 저장되어 있다.

여기서 변수의 이름은 name 이다. 변수에 저장된 값은 Alice라는 문자열이다. 메모리에 Alice 라는 정보를 저장해 두고 그 공간을 name이라고 이름 붙여 둔 것이다. 그래서 저 이름 정보를 가져오고 싶다면 name이라는 변수를 호출함으로써 값을 가져올 수 있게된다.

 

height에는 5.4가 저장되어 있다.

여기서 변수의 이름은 height이다. 변수에 저장된 값은 5.4라는 숫자 값이다. 메모리에는 height라는 공간을 만들어 두고, 그 공간에 5.4라는 정보를 저장한 것이다. 그래서 저 수치를 사용할 필요가 있을 경우 height라는 변수를 불러오면 된다.

 

코딩 수업에서 사실 학생들이 자주 물어보는 부분은 변수의 이름이다. 위 코드를 예시로 하면, 첫번째 줄에 age는 뭐에요..? 라고 물어보는 경우가 많다. 25라는 값을 저장하고 있는 변수의 이름을 age라고 정의한 것이다. 사실 저 변수를 꼭 age라고 이름 붙일 필요는 없다. a라고 해도 되고, b라고 해도 되고,, 내 마음대로 붙여도 된다. stupid도 되고... 진짜 자유다. 그러면 내 마음대로 바꿔도 되요? 그래도 된다.

 

부모가 자식한테 이름을 지을 때 사실 아무 이름이나 붙여도 된다. 아이 이름을 똥개라고 해도 되고 똥멍청이라고 지어도 된다. 부모 마음이다. 이렇게 이름을 지어주는게 불법은 아니다. 하지만 이렇게 이름을 붙여줄 부모는 아무도 없을 거다. 이름이라는 것이 중요한 의미를 띄기 때문이다.

변수도 아무 이름이나 붙여줘도 된다. 하지만 아무 이름이나 붙여준다면 내가 나중에 기억을 할 수가 없다. 위 코드에서 25라는 값을 저장한 변수의 이름이 age인 이유는? 코드에서 25라는 값이 의미하는 바가 사람의 나이 이기 때문이다. 코드의 의미를 담아서 변수의 이름을 저장하는 것이 나한테 도움이 되기 때문에 그렇게 변수 이름을 짓는 것이다. 이 코드를 다른 사람이 볼 수도 있는데, 그때도 의미가 담긴 이름을 변수에 붙여줘야 코드를 이해하기가 쉽다.