📙 (JAVASCRIPT)

변수는 굳이 왜 쓰는 걸까? 🎁

놀러와요 버그의 숲 2021. 11. 27. 22:04
728x90
반응형

수업을 듣다가 문득 의문이 들었다. 

 

변수는 굳이 왜 쓰는거지? 없으면 안되나? 

 

주머니라는 개념을 통해서 대충 값을 저장한다는 정도는 알고 있었지만, 왜 쓰는지에 대한 정확한 이유를 알진 못한다.

(변수를 사용하는 방법에 대해서만 알고 있지) 

 

나는 기술이란 "어떠한 문제를 해결해 주는 툴 🔨" 이라고 생각한다. 

 

그래서 어떤 기술과 관련된 지식을 이해할 때는 문제점을 실제로 겪어보고 이를 해결해보는 과정이

가장 효과적인 공부 방법이라고 생각한다.

(이러한 문제를 겪지 않고, 바로 해결책을 쓰는 법을 배운다면, 속 빈 강정 같은 지식이라고 표현하고 싶다.)

 

간단히, 구글링을 해보고, 관련된 예시를 만들어보았다.

 

만약 여자친구와 기념일이 1000일이였다고 가정해보자.

그리고 기념일 계산을 위해 위의 예시처럼 여러 계산을 해봤다고 가정해보자

알고보니 착각을 하여 1000일 아니라, 기념일이 999일이었기에, 이를 모두 수정해보아야 한다고 생각해보자  

 

위의 예시에서 1000에 해당하는 숫자만 다 바꾸고 싶다고 해보자.

어떻게 할것인가? 일일이 다 고칠 것인가? 만약 이런 코드가 100줄 ,1000줄 있다고 한다면?

엄청난 개 노가다일거야. 

변수는 이러한 문제를 해결해준다. 만약 1000을 저장할 수 있는 '기념일' 이름표가 있다고 해보자.

 

기념일 = 1000 으로 선언을 하고 

console.log( 기념일 + 10)
console.log(기념일 *10 ).....

이런식으로 코드를 짠다면 

기념일 =999 로만 바꿔만 준다면, 전체 모두 999로 바뀔 것이다.

 

이처럼 변수는 코드의 재사용성과 유지,보수를 위해 사용된다.

 

그런데...

 

이대로 결론을 내기에는 너무 찜찜했다. 뭔가 더 근본적인 이유가 있을 것이라고 나는 생각했다.

 

그래서 모던 자바스크립트 Deep Dive (이웅모 저) 4장 변수 부분을 읽으면서 조금 더 깊게 이해하려고 했다.

 

사람은 계산과 기억을 모두 두뇌에서 하지만, 컴퓨터는 연산과 기억을 수행하는 부품이 나누어져있다.

 

신기해...그치 내가 10 + 20을 계산할 때도, 10과 + 20 모두 기억하는것도 뇌에서 하고

 

10 + 20 을 연산하는것도 내 두뇌에서 하지. ㅋㅋㅋ 뭐 허벅지에서 하지는 않을거 아니야 ㅋㅋㅋ

 

컴퓨터는 CPU를 사용해 연산하고, 메모리를 사용해 데이터를 기억한다.

 

컴퓨터는 계산 처리를 하려면 CPU , 메모리로 나누어져 역할을 각자 수행하나봐 ㅋㅋㅋㅋ

 

각 셀은 고유의 메모리 주소를 갖는다. 이 메모리 주소는 공간의 위치를 나타낸다.

 

그치 공간이 엄청 많을테니까, 주소가 있으면 빠르게 접근할 수가 있겟지.

 

위에서 10과 20은 메모리 상의 임의의 위치(메모리주소)에 기억되고 CPU는 이 값을 읽어 들여 연산을 수행한다.

 

아...임의의 위치에 기억되는구나. CPU가 주소를 찾아서 얘네들을 가져오는 느낌이구!

 

연산 결과를 단 한번만 사용한다면 문제가 없겠지만, 만약 연산 결과 30을 재사용하고 싶다면 메모리 주소를 통해 연산 결과 30이 저장된

메모리 공간에 직접 접근하는 방법 밖에 없다.

 

그치 당연히 재사용하고 싶지 않을까? 아니면 또 계속 불러오고 너무 비효율적이니까! 

 

만약 실수로 운영체제가 사용하고 있는 값을 변경하면 시스템을 멈추게 하는 치명적인 오류가 발생할 수 있다.

 

궁금하네... 왜 치명적인 오류가 발생할까? 

 

따라서 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다.

 

아..자바스크립트는 그래서 막아놨구나...그래서 변수 쓰라고 하는 거 같구. 저장해서 갖다 쓰면 되니까

 

값이 저장될 메모리 주소는 코드가 실행될 때 메모리의 상황에 따라 임의로 결정된다. 

 

아 그러면, 계속 메모리 주소가 바뀌겠네. 와 어렵네

 

따라서 동일한 컴퓨터에서 동일한 코드를 실행될 때마다 값이 저장될 메모리 주소는 변경된다.

 

그러면 계속 주소가 바뀌니까 찾기 어렵지 않을까? 

 

따라서 메모리 주소를 통해 값에 직접 접근하려는 시도는 올바른 방법이 아니다. 

 

그렇네 어처피 바뀌어 있을텐데, 어떻게 찾아 찾는데도 시간 오래 걸릴거고! 

 

프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 '변수' 라는 메커니즘을 제공한다. 

 

아..그러니까 주소로 접근하지도 않고, 직접 읽어들이지도 않고, 그냥 변수라는 새로운 이름표를 붙이는구나. 그러면 변수의 이름은

변하지 않을테니까 찾기 쉬울거고

 

변수는 언어에서 값을 저장하고 참조하는 메커니즘으로, 값의 위치를 가리키는 상징적인 이름이다. 

 

변수는 값의 위치를 가리키는 구나. 

 

상징적 이름인 변수는 프로그래밍 언어의 컴파일러 또는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 치환되어 실행된다.

 

예를 들어  자바스크립트의 경우 result라는 변수가 있으면 이것을 인터프리터가 읽어서 메모리 주소로 바꾸나봐

 

따라서 개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요가 없고 변수를 통해 안전하게 값에 접근 할 수 있다.

 

개발자가 접근하는게 아니라! 인터프리터가 !! 변수 되게 중요하구나

 

10 +20은 연산을 통해 새로운 값 30을 저장한다. 그리고 연산을 통해 생성된 값 30은 메모리 공간에 저장된다.

이때 메모리 공간에 저장된 값 30을 다시 읽어 들여 재사용할 수 있도록 값이 저장된 메모리 공간에 상징적인 이름을 붙인 것이 바로 변수다.

 

그니까, 30이 저장되어 있긴한데, 이것을 다시 가져다가 쓰려면 변수에다가 저장하는게 낫겟구나. 

 

변수에 저장된 값을 읽어 들이는 것을 참조라고 한다.

 

이건 용어를 몰랐어! var result = 30 이라고 하면 30이라고 읽어 들이는 것을 참조라고 하는군!

 

이번에 책을 읽으면서 깨달은 점은 직접 메모리에 접근하는 것은 매우 위험하고 비효율적이기에, 안전하게 값에 접근하기 위해 변수를 이용한다는 것을 깨달았다.

 

내가 정리한 변수를 쓰는 이유는! 다음과 같다.

 

1. 메모리에 저장된 값의 위치를  안전하게 접근하게 도와주기 때문이다.

 

2. 코드의 재사용성을 높이고 유지,보수를 용이하게 해주기 때문이다.

 

 

참고문헌: 이웅모, 『모던 자바스크립트 Deep Dive, 위키북스(2020), p34~p38.