프로그래밍을 하시면서 아주 예리하게 짚어내신 부분입니다! "변하는 값인데 왜 상수를 뜻하는 const를 쓰느냐"는 질문은 const의 진정한 의미를 이해하는 데 매우 중요한 질문입니다.
결론부터 말씀드리면, isAllocated라는 "변수명(상자)" 자체에 다른 값을 다시 대입(Re-assignment)하지 않기 때문입니다.
1. "값"이 변하는 것 vs "재대입"하는 것
우리가 보통 "변한다"라고 할 때는 프로그램이 실행되면서 이 상자에 A를 넣었다가 나중에 B로 갈아끼우는 상황을 말합니다.
let이 필요한 경우 (재대입):JavaScript
let isAllocated = ''; // 처음엔 빈 값 if (row.allocatedAt) { isAllocated = 'disabled'; // 나중에 값을 '교체'함 }const가 가능한 경우 (초기화 시 결정):JavaScript
// 선언하는 순간 삼항 연산자에 의해 'disabled' 또는 '' 중 하나로 딱 결정됨 // 이 줄 이후로 isAllocated = '다른값'; 이라고 다시 대입할 일이 없음 const isAllocated = row.allocatedAt ? 'disabled readonly' : '';
2. 왜 const를 권장할까요? (의도 파악)
현대 자바스크립트(ES6+) 개발 관례에서는 "재대입이 필요 없는 모든 변수는 우선 const로 선언하라"고 권장합니다. 그 이유는 다음과 같습니다.
- 실수 방지: 코드가 수백 줄이 되었을 때, 실수로
isAllocated = "내용"처럼 값을 덮어쓰는 사고를 원천 봉쇄합니다. - 가독성(코드의 신뢰도): 동료 개발자가 이 코드를 볼 때,
const로 선언된 것을 보면 "아, 이 변수는 선언된 이후로 값이 절대 바뀌지 않겠구나"라고 안심하고 나머지 코드를 읽을 수 있습니다. - 컴파일러 최적화: 브라우저 엔진이 값이 바뀌지 않는다는 것을 알고 더 효율적으로 메모리를 관리합니다.
3. 쉬운 비유
let: 내용을 지우고 다시 쓸 수 있는 화이트보드const: 한 번 인쇄하면 바꿀 수 없는 출력물
위 코드에서 isAllocated는 매 루프(row)마다 새롭게 인쇄되는 출력물과 같습니다. 한 번 인쇄된(선언된) 이후에는 그 행 안에서 내용이 바뀔 일이 없으므로 const가 가장 적절한 선택입니다.
요약
row.allocatedAt의 값에 따라 결과가 달라지긴 하지만, 한 번 결정된 isAllocated의 값이 그 스코프 안에서 다시 바뀔 일이 없기 때문에 const를 사용하는 것이 더 안전하고 좋은 관습입니다.
물론 let을 써도 코드는 정상 작동하지만, "이 값은 여기서 결정되면 끝이야!"라는 의지를 보여주기 위해 const를 쓴다고 이해하시면 완벽합니다! 😊