Koans는 불교에서 유래된 단어로, 결론을 내리기 전에 이게 왜 맞는지 깊게 고민한다는 의미를 가지고 있다고 한다. 답이 미리 제시되어 있기 때문에 고민 없이 풀면, 큰 어려움 없이 전부 다 풀 수 있지만 그게 왜 정답인지 깊게 고민해 보는 시간을 갖지 않는다면 충분히 성장하기 어려울 것이다. 즉, '왜?' 라는 물음에 대해 꼭 깊은 고찰을 하고 넘어가자는 의미이다.
describe("'const'에 대해서 학습합니다.", function () {
it("'const'로 선언된 변수에는 재할당(reassignment)이 금지됩니다.", function () {
const constNum = 0;
expect(constNum).to.equal(0);
const constString = 'I am a const';
expect(constString).to.equal('I am a const');
});
it("'const'로 선언된 배열의 경우 새로운 요소를 추가하거나 삭제할 수 있습니다.", function () {
const arr = [];
const toBePushed = 42;
arr.push(toBePushed);
expect(arr[0]).to.equal(42);
// 재할당은 금지된다.
// arr = [1, 2, 3];
});
it("'const'로 선언된 객체의 경우, 속성을 추가하거나 삭제할 수 있습니다.", function () {
const obj = { x: 1 };
expect(obj.x).to.equal(1);
delete obj.x;
expect(obj.x).to.equal(undefined);
// 재할당은 금지된다.
// obj = { x: 123 };
obj.occupation = 'SW Engineer';
expect(obj['occupation']).to.equal('SW Engineer');
});
});
코드가 길어질 때 아래에서 예상치 못하게 할당값이 변하는 것을 막기 위해 const사용이 추천된다다. 우선하여 const로 변수를 선언한 후 차후에 재할당이 필요한 값에 한해 let을 사용하는 것을 권장합니다. (대체로 for문 외에는 let을 쓸 일도 별로 없습니다.)
구글 자바스크립트 코딩 스타일 가이드에서의 const에 대한 언급을 발췌해보았다.
Constant names use CONSTANT_CASE: all uppercase letters, with words separated by underscores. There is no reason for a constant to be named with a trailing underscore, since private static properties can be replaced by (implicitly private) module locals.
6.2.5.1 Definition of “constant”
Every constant is a @const static property or a module-local const declaration, but not all @const static properties and module-local consts are constants. Before choosing constant case, consider whether the field really feels like a deeply immutable constant. For example, if any of that instance's observable state can change, it is almost certainly not a constant. Merely intending to never mutate the object is generally not enough.
Examples:
// Constants
const NUMBER = 5;
/** @const */ exports.NAMES = ImmutableList.of('Ed', 'Ann');
/** @enum */ exports.SomeEnum = { ENUM_CONSTANT: 'value' };
// Not constants
let letVariable = 'non-const';
class MyClass { constructor() { /** @const {string} */ this.nonStatic = 'non-static'; } };
/** @type {string} */ MyClass.staticButMutable = 'not @const, can be reassigned';
const /** Set<string> */ mutableCollection = new Set();
const /** ImmutableSet<SomeMutableType> */ mutableElements = ImmutableSet.of(mutable);
const Foo = goog.require('my.Foo'); // mirrors imported name
const logger = log.getLogger('loggers.are.not.immutable');
Constants’ names are typically nouns or noun phrases.
'FE > JavaScript' 카테고리의 다른 글
[JS] test를 통한 array 개념 익히기 _Koans (0) | 2023.03.06 |
---|---|
[JS] test를 통한 화살표 함수 개념 익히기 _Koans (0) | 2023.03.05 |
[JS] test를 통한 type 개념 익히기 _Koans (2) | 2023.03.05 |
[JS] 테스트케이스 expect _Koans (0) | 2023.03.05 |
[JS] spread/rest (0) | 2023.03.03 |