변수와 상수의 차이와 활용

JavaScript에서 변수(variable)상수(constant)는 데이터를 저장하고 관리하는 핵심 요소이다.
var, let, const는 각각의 특성과 용도가 다르며, 코드 작성 시 이를 적절히 사용하는 것이 중요하다.

 

변수와 상수 선언 방법

1. var

  • 특징:
    • 재선언 및 재할당 가능.
    • 함수 스코프(Function Scope)를 가짐.
    • 블록 스코프를 지원하지 않음.
  • 사용 예:
    var name = "John";
    
    name = "Doe"; // 재할당 가능

주의: var는 의도치 않은 호이스팅 문제를 유발할 수 있으므로 현대 코드에서는 let과 const 사용이 권장된다.

 

2. let

  • 특징:
    • 재선언 불가능하지만 재할당 가능.
    • 블록 스코프(Block Scope)를 지원.
  • 사용 예:
let age = 25;

age = 26; // 재할당 가능

 

3. const

  • 특징:
    • 재선언 및 재할당 불가능.
    • 반드시 선언 시 초기화 필요.
    • 블록 스코프를 지원.
  • 사용 예:
const PI = 3.14;

// PI = 3.15; // Error: 재할당 불가능

 

변수와 상수의 주요 차이점

특성 var let const
재선언 가능 여부 Yes No No
재할당 가능 여부 Yes Yes No
초기화 필요 여부 No No Yes
스코프 함수 스코프 블록 스코프 블록 스코프

 

스코프(Scope)와 호이스팅(Hoisting)

1. 스코프

  • 함수 스코프: var로 선언된 변수는 함수 내에서만 유효.
  • 블록 스코프: let과 const는 {}로 감싼 블록 내에서만 유효.
if (true) {
  let x = 0;
}

console.log(x); // Error: x is not defined​

 

2. 호이스팅

  • JavaScript는 변수 선언을 코드의 상단으로 끌어올리는 호이스팅을 수행한다.
  • var는 선언부만 끌어올려져 초기화되지 않은 상태로 처리된다.
console.log(a); // undefined
var a = 5;

console.log(b); // Error: Cannot access 'b' before initialization
let b = 10;​

 

let과 const의 추천 사용법

1. const를 기본적으로 사용.
값이 변하지 않는 데이터를 선언할 때 사용

const maxUsers = 100;
 

2. 필요할 때만 let 사용.
동적으로 변경되는 데이터에 적합

let userCount = 0;
userCount++;

 

 

3. var는 사용하지 않음.
var의 함수 스코프와 호이스팅 문제는 유지보수에 적합하지 않다.

 

객체와 배열의 상수 처리

const로 선언된 객체와 배열은 내부 데이터 변경이 가능하다.

const user = { name: "Alice" };
user.name = "Bob"; // 가능

const numbers = [1, 2, 3];
numbers.push(4); // 가능

 

하지만 참조 자체를 변경하는 것은 불가능합니다:

user = { name: "Charlie" }; // Error: 재할당 불가능

 

변수 선언 관련 유용한 팁

 

1. 명확한 변수 이름 사용:
변수의 목적을 쉽게 알 수 있도록 작성

let userAge = 30; // 명확한 변수명

 

2. 초기화와 함께 선언:

선언과 초기화를 동시에 하여 예측 가능한 코드를 작성

const isLoggedIn = false;

3. 스코프를 잘 이해하고 활용:
불필요한 전역 변수 사용을 지양

 

요약

  • var 대신 let과 const를 사용
  • const는 값을 변경하지 않을 때, let은 변경 가능성이 있을 때 사용한다.
  • 스코프와 호이스팅의 작동 방식을 이해하면 코드 오류를 줄이고 가독성을 높일 수 있다.

최적의 코드 작성: 명확한 변수 선언과 스코프 활용은 코드 품질을 높이고, 협업 시 이해도를 향상시킨다.

 

 

 

참조
https://tcpschool.com/javascript/js_intro_syntax#google_vignette

https://ko.javascript.info/variables

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B3%80%EC%88%98-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85#thankYou

 

 

'Web Programming Language > JS' 카테고리의 다른 글

JavaScript란?  (0) 2024.12.03
JavaScript) eval() 함수  (0) 2020.10.29
java script) history.back(), history.go(), history.forward()  (0) 2020.10.27

+ Recent posts