04 변수

연우·2024년 11월 1일
0

4.1 변수란 무엇인가? 왜 필요한가?

  • 변수 : 프래그래밍 언어에서 데이터를 관리하기 위한 핵심 개념
<예시>
10 + 20
  • 컴퓨터는 CPU를 사용해 연산하고 메모리를 사용해 데이터를 기억한다
  • 메모리 : 데이터를 저장할 수 있는 메모리 셀의 집합체
  • 메모리 셀 하나의 크기는 1바이트이며, 컴퓨터는 메모리셀의 크기로 데이터를 저장하거나 읽어 들인다.
  • 각 셀은 메모리 주소를 갖는다. 메모리 주소는 메모리 공간의 위치를 나타낸다.
  • 컴퓨터는 모든 데이터를 2진수로 처리해서 저장되는 모든 뎅터는 모두 2진수로 저장된다.

위 예제의 숫자 값은 메모리 상의 임의의 위치에 기억되고 CPU는 이 값을 읽어들여 연산을 수행한다.
연산 결과로 생선된 숫자 값도 메모리 상의 임의의 위치에 저장된다.
하지만 만들어낸 결과값을 재사용하기 위해선 메모리 주소를 통해 직접 접근해야하나 치명적 오류를 발생시킬 수 있다.

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

  • 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.(값의 위치를 가리키는 상징적인 이름)

  • 식별할 수 있는 고유한 이름을 변수 이름 그리고 저장된 값을 변수 값이라고 함

  • 변수에 값을 지정하는 것을 할당(assignment)(대입, 저장)이라고 하고 값을 읽어 들이는 것을 참조(reference)라 한다.

4.2 식별자

  • 변수 이름을 식별자(identifier)라고도 한다.
  • 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말함
  • 식별자는 값이 아니라 메모리 주소를 기억하고 있음
  • 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자

4.3 변수 선언

  • 변수선언 : 변수를 생성하는 것
    - 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것
  • 변수를 사용하려면 반드시 선언이 필요
  • 선언할 때는 var, let, const 키워드를 사용한다.
var score; // 변수 선언(변수 선언문)
  • 키워드는 수행할 동작을 규정한 일종의 명령어
  • 변수를 선언한 이후, 아직 변수에 값을 할당하지 않으면 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화된다.
  • 자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행
    - 선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다
    - 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 한다.
  • 초기화란 변수가 선언된 이후 최초로 값을 할당하는 것을 말한다.
  • 만약 초기화 단계를 거치지 않으면 메모리 공간에는 이전에 사용했던 값이 남아 있을 수 잇는데 이러한 값을 쓰레기 값이라 한다.

4.4 변수 선언의 실행 시점과 변수 호이스팅

console.log(score); // undefined

var score; // 변수 선언문

자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행되므로 참조 에러(ReferenceError)가 발생할 것처럼 보인다.
하지만 참조 에러가 발생하지 않고 undefined가 출력된다

그 이유는 변수 선언이 소스코드가 한 줄씩 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문이다.

  • 자바스크립트 엔진은 순차적으로 실행하기에 앞서 먼저 소스코드의 평가 과정을 거치면서 실행하기 위한 준비를 한다.
  • 이 때 변수 선언을 포함한 모든 선언문을 소스크드에서 찾아내 먼저 실행한다.
  • 소스코드의 평과 과정이 끝나면 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.

변수 호이스팅 : 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징

4.5 값의 할당

  • 변수에 값을 할당할 때는 할당 연산자 = 를 사용한다.
  • 할당 연산자는 우변의 값을 좌변의 변수에 할당한다
var score; // 변수 선언
score = 80; // 값의 할당
  • 변수 선언과 값의 할당을 하나의 문으로 단축 표현 가능
var score = 80; // 변수 선언과 값의 할당

주의할 점으로 변수 선언은 소스코드가 순차적으로 실행되는 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 런타임에 실행된다.

  • 하나의 문으로 단축 표현해도 2개의 문으로 나누어 각각 실행
console.log(score); // undefined

score = 80;
var score;

console.log(score); // 80

4.6 값의 재할당

  • 재할당 : 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당
var score = 80;
score = 90; // 재할당

값을 재할당할 수 없는것은 변수가 아니라 상수(constant)라 한다.

  • 재할당은 그 메모리 공간에 새롭게 저장하는 것이 아닌 새로운 메모리 공간을 확보하고 그 공간에 저장
  • 이전 값인 80과 undefined는 어떤 변수도 가지고 있지 않는다.
  • 가비지 콜렉터 : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 사용되지 않는 메모리를 해제 하는 기능

4.7 식별자 네이밍 규칙

  • 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있다.
  • 단, 식별자는 특수문자를 제외한 문자, 언더스코어(_), 달러기호($)로 시작해야 한다. 숫자로 시작하는 것은 허용하지 않는다.
  • 예약어는 식별자로 사용할 수 없다.
    - 예약어 : 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어
  • 변수는 쉼표로 구분해 하나의 문에서 여러 개를 한번에 선언할 수 있으나 가독성이 나빠지므로 권장하지 않는다
  • 네이밍 컨벤션 : 하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 구분하기 위해 규정한 명명 규칙
  • 변수나 함수는 카멜케이스
  • 생성자 함수, 클래스의 이름에는 파스칼 케이스를 사용
// 카멜 케이스
var firstName;

// 스네이크 케이스
var first_name;

// 파스칼 케이스
var Firsrname;

// 헝가리언 케이스
var strFirstName;

0개의 댓글