HyunJun 기술 블로그

자바스크립트는 느슨한 타입의 동적 언어, var, let, const / scope 본문

JavaScript

자바스크립트는 느슨한 타입의 동적 언어, var, let, const / scope

공부 좋아 2023. 5. 23. 20:09
728x90
반응형

1. 느슨한 타입의 동적 언어(loosely typed, dynmaic)


JavaScript의 변수는 어떤 특정한 타입과 연결되지 않으며, 모든 타입의 값으로 할당 (및 재할당) 가능하다.

 

  • 첫 개발을 C -> 자바로 시작했던 저로서는 자바스크립트를 처음 접했을 때 쉽다고 느끼기도 했지만 헷갈리는 부분이 많았습니다.
  • 각자의 장단점이 있겠지만 느슨한 타입의 언어는 처음에 배우기 쉽고, 타입에 자유로운 장점이 있지만 때로는 타입이 지정되어 있지 않기 때문에 헷갈리거나, 구현이 잘 안되는 부분도 존재합니다.
  • 추가로 대표적인 느슨한 타입의 동적 언어로서는 Python이 있습니다.

2. 변수

 

JavaScript에서의 변수는 var, let, const를 사용합니다.

 

 

변수 선언: 변수를 정의하는 것을 의미합니다.

var variable;

 

변수 할당: 변수가 선언된 후 대입 연산자(=)를 통해 값을 할당해 주는 것을 의미합니다.

var variable;
variable = 'test';

 

변수 초기화: 변수를 선언함과 동시에 할당하는 것을 의미합니다.

var variable = 'test';

 

3. var, let, const 차이점

  var let const
선언 중복 선언 가능 중복 선언 불가 중복 선언 불가
할당 재할당 가능 재할당 가능 재할당 불가
Scope Function Level Scope Block Level Scope Block Level Scope

결론적으로 개발자 입장에서 자바스크립트의 변수 선언은 타입 지정보다는 변수의 범위만 지정해 주면 됩니다.

위의 선언, 할당, Scope가 무엇을 의미하는지 코드로 확인해 보도록 할게요.

 

 

var

// var : 중복 선언 가능, 재할당 가능

// 선언
var v = 'i am var1';
console.log(v);

// 중복 선언 가능
var v = 'i am var2';
console.log(v);


// 재할당 가능
v = 'i am var3';
console.log(v)


// Scope
// var : Function Level Scope
function func() {

    if (true) {
        var a = 'a';
        console.log(a);
    }
    console.log(a);
}

func();

// Scope에서 벗어났으므로, a가 정의되지 않음.
// console.log(a);

 

 

 

let

// let : 중복 선언 불가, 재할당 가능

// 선언
let l = 'i am let1';
console.log(l);

// 중복 선언 불가
// let l = 'i am let2';
// console.log(l);

// 재할당 가능
l = 'i am let3';
console.log(l)

// Scope
// let : Block Level Scope
function func2(){
    if (true) {
        let b = 'b';
        console.log(b);
    }

    // Scope에서 벗어났으므로, b가 정의되지 않음.
    // console.log(b);
}

func2();

 

 

const

// const : 중복 선언 불가, 재할당 불가
const c = 'i am const1';
console.log(c)

// 중복 선언 불가
// const c = 'i am const2';
// console.log(c);

// 재할당 불가
// c = 'i am const3';
// console.log(c);

// Scope
// const : Block Level Scope
function func3(){
    if (true) {
        let blockC = 'c';
        console.log(blockC);
    }

    // Scope에서 벗어났으므로, c가 정의되지 않음.
    // console.log(blockC);
}

func3();

 

 

4. 결론

변수를 생성할 때 재할당이 필요 없다면 const를 사용한다. 재할당이 필요하면 let을 사용하지만 변수의 Scope를 최대한 좁게 만들어서 사용하는 것이 좋다.

728x90
반응형
Comments