JavaScript

상수를 대문자로 쓰는 이유? 뿌리를 알아보자!

남희정 2023. 8. 28. 16:46

프로젝트 중 상수를 대문자로 쓰는 게 관례라고 해서 왜 그런 것인지, 꼭 지켜야만 하는 것인지에 대해 생각해보려 한다!

 

상수 Constant

프로그래밍에서 변하지 않는 것을 의미한다. 상수는 변수에 할당되지만 프로그램 실행 중에는 변경하거나 수정할 수 없는 값이다. 일반적으로 시간이 지나도 변하지 않는 고정 값 또는 값을 나타내는 데에 사용된다. 

`const` 키워드를 사용하여 정의되며 상수 값은 일단 정의되면 수정할 수 없다. (JS에서 배열 일부를 변경하는 것은 가능함, 참조하는 주소값을 변경하는 것은 아니라서. 통째로 바꾸려는게 안된다는 것. )

 

JavaScript는 변경할 수 없는 값을 선언하는 방법을 제공할까? 관습의 뿌리는 어디일까!

 

The capitalization convention has roots in C

대문자 컨벤션은 C언어에 뿌리를 두고 있다.

C언어는 Compiler 언어이다. 프로그램이 실행되기 전에 모든 코드를 머신 코드로 변환한다. JavaScript는 Interpreter 언어로 코드가 실행될 때 줄 단위로 코드를 읽는다. 이 차이는 C에서 상수 값을 선언하는 방식에 영향을 미친다.

 

#define hoursInDay 24

 

컴파일러는 상수가 대문자이든, 소문자이든 24에 집중한다. 대신 대문자를 사용하면 프로그래머가 상수 값을 확실하게 확인할 수 있다.

 

#define HOURS_IN_DAY 24

모든 매크로(`#define`)를 대문자로 작성하면 충돌을 방지하고 코드에서 매크로를 빠르게 식별할 수 있다. C언어에서는 대소문자를 구별하기 때문에 대문자 매크로와 다른 식별자는 서로 다른 것으로 처리된다. 

 

JavaScript 에서의 상수

 

JavaScript에서도 ES6부터 const와 let이 생겼는데, 이전에 var로만 모든 변수를 처리해야될 때 이런 대문자 컨벤션은 유용했을 것이라 생각한다!

 

const는 위에서 말했듯이 참조값은 변경될 수 있기 때문에 대문자로 사용하기 위해선 이런 조건을 참고하는 것이 좋다.

1. 변수의 값이 원시 값인가?

2. 프로그램 전체에서 동일한 값이고, 그에 대한 변수 이름을 유지하기 위해 사용하는가?

 

두 조건이 해당되면 대문자를 사용할 수 있다.

일반적으로 하드 코딩된 상수에 대문자를 사용한다. 실행 전 값이 알려져있고 코드에 직접 기재된 경우!

 

const BIRTHDAY = '18.04.1982'; // make birthday uppercase?

const AGE = someCode(BIRTHDAY); // make age uppercase?

 

위의 예시에서 BIRTHDAY는 대문자를 사용할 수 있다. 하지만 age는 런타임에 평가된다. 오늘은 한 살이지만 내년엔 다른 나이가 된다. 물론 실행 후 변하지 않아서 상수지만, 생일보단 덜한 상수라 볼 수 있음. 계산되기 때문에 소문자를 사용할 수 있다.

 

무조건적으로 사용해야 된다는 말을 할 수 없다. 이 컨벤션은 상수를 가진 여러 언어에서 비롯되었다. 자바스크립트의 경우 그렇지 않다. 

 

핵심은 JavaScript에서 상수를 정의할 때 프로그래머의 의도가 포함되어야 한다는 점을 인식하는 것.

모든 컨벤션이 그렇듯 회사와 환경에 따라 요구 사항은 다를 수 있다! 개발자들간의 약속인 것이니까.

 


[When to capitalize your JavaScript constants]

[프로그래밍에서 상수란 무엇인가?]

[Uppercase const?]

[What is the history for naming constants in all uppercase?]

ChatGPT 🤖