코드스테이츠를 Pre-course 과정을 시작한지 2주차가 지났다. 대학교 1학년때 자바를 간단하게 익혀서 그런지 Javascript 문법에 크게 거부감은 없어서 다행이었다. 아직까진 수업도 크게 어렵진 않지만, 다음 주부터는 본격적으로 깊게 들어갈 예정이라고 하니 두렵기도하고 설렌다.
3주차를 시작하기 전에 개인적으로 감명(?)받은 혹은 깨달음이 되었던 개념을 설명하며 리뷰하고자 포스트를 작성하게 되었다. 개인적으로 블로깅이란 것도 처음이라 미숙하겠지만 차차 나아질거라 생각하며 본론으로 들어가보기로 한다.
Javascript에는 일반적으로 Boolean 값으로 사용될 때 false
로 평가되는 값들이 있다. 대체로 부정적이거나 값이 비어있는 경우에 발생하는 값들로 이루어져 있는데, 이 값들을 "Falsy" 라고 한다. 예시로는 아래처럼 총 6가지의 값이 있다.
ex)
false, null, undefined, 0, ‘’, NaN
위의 값들은 조건문이나 반복문에서
if ( a === true ) { return 'Hello'; }```
처럼 표현할 필요없이, 아래처럼
```js
if ( a ) { return 'Hello'; } // if a is true, return 'Hello'```
그 자체가 Boolean 값으로 받아들여진다.
위의 개념을 잘 이해하게 되면 코드를 더욱 효율적으로 작성하는데 도움이 된다.
한 알고리즘 과제를 풀고 나서야 다시 이 개념을 찾아보고 이번 포스트를 작성할 생각이 들었었다.
### 2. Truthy/Falsy 개념 예제
배열과 객체에 관련된 문제였는데, 한 ```string```이 주어지면, 그 ```string```을 이루고 있는 알파벳들이 각각 몇번씩 사용되었는지 카운트하는 문제였다. 알파벳들은 리턴하게 될 객체의 ```key```가 되고, 알파벳이 사용된 수는 해당 ```key```의 ```value```로 할당되게 하는 것이었다. 코드가 시행된다면 아래와 같은 결과가 나타나야 한다.
```js
let word = ‘October’;
countAllCharOfWord(word);
// {‘o’: 2, ‘c’: 1, ‘t’: 1, ‘b’: 1, ‘e’: 1, ‘r’: 1}
이 문제를 해결할 때 나의 고민은 ‘같은 알파벳이 두 번 이상 나타나는 경우, 어떻게 하나의 key에 카운트를 할 수 있게 할까’ 였다. 오랜 고민과 검색(그리고 stackoverflow 의 큰 도움) 끝에 바로 위의 Truthy/Falsy 개념을 응용하여 문제를 해결할 수 있었다.
function countAllCharacters(str) {
let count = {};
for (let i = 0; i < str.length; i++) {
let char = str.charAt(i);
if (count[char]) {
count[char]++;
} else {
count[char] = 1;
}
}
return count;
}
먼저 str
의 길이를 모두 포함시키는 for-loop을 만들고
let char
은 charAt()
을 이용하여 해당 인덱스(i
)의 위치하는 문자를 할당받는다.
그리고 다음 if문을 설정할 때 바로 Truthy/Falsy의 개념을 이용하면 간단하고 효율적인 if문이 만들어진다. 아래는 위의 코드의 일부이다.
if (count[char]) { //char을 key로 가진 요소의 value가 이미 존재한다면,
count[char]++; //해당 key의 value를 1 더해줍니다.
} else { //char을 key로 가지고 있지 않다(= 처음 나온 알파벳이라)면,
count[char] = 1; //객체 count에 char을 key로, value는 1로 할당한다.
}
이 간단한 조건으로 for-loop을 순차적으로 돌면서 같은 알파벳이 다시 나타나면,
count[char]
은 1 이상의 값을 이미 할당 받은 상태이기에 Truthy 를 충족한다.
그렇지 않을 경우는 else
로 넘어와 객체에 새로 key
와 value
를 생성하게 된다.
이 과정을 반복하며 for-loop이 끝나고 나면, 객체 count
는 각 알파벳을 key
로, 알파벳의 수를 value
로 할당받게 된다.
코딩을 계속 하면 할 수록 ‘아는 것이 힘이다' 라는 말이 더욱 크게 와 닿는다. 알지 못하면 비효율적인, 혹은 불편한 방식을 단순반복하며 꾸역꾸역 문제를 푼다. 이럴 때는 뇌가 깨어있지 않은 느낌마저 들 때가 있다. 그러다 새로운 개념을 익히고, 이해하고, 응용할 때는 비교할 수 없는 성취감이 밀려온다. 부디 이 성취감이 앞으로의 과정에도 지속되기를 바라며 첫번째 포스팅을 마친다.