이번에는 프로그래밍 언어에 기본인 비교문, 조건문, 반복문에 대해 알아본다. 다른 언어에서도 비슷한 문법을 지니고 있기 때문에 간단하게만 보고 넘어간다.
-> 이게 무슨 X소리...?
자바스크립트는 동적 타이핑 언어로 변수를 정의할 때, 타입을 따로 정하지 않는다. 그러면 두 개의 변수를 비교할 때 이상이 없을까?
이상이 있다! 특정 경우에서 변수를 그냥 비교했다가 false라고 생각한게 true로 나오고, true로 생각한게 false로 나올 수 있다.
자바스크립트에서도 다른 언어와 마찬가지로 '='은 대입 연산자를 의미한다. 오른쪽에 있는 값이나 주소를 왼쪽에 명명한 주소로 입력한다.
// a에 숫자 1 대입
let a = 1;
// b에 숫자 3 대입
let b = 3;
// a와 b의 합을 c에 대입
let c = a + b;
console.log(c); // 4 출력
비교 연산자는 결과를 true나 false로 반환한다. 자바스크립트에서는 비교 연산자가 두 가지 있는데, '='을 몇 개 사용하는지에 따라 동작하는 방식이 다르다. 먼저 두 개 사용할 때를 보자.
// 숫자 1과 숫자 1 비교
console.log(1 == 1); // true
// 숫자 1과 문자 1 비교
console.log(1 == '1'); // true
// 문자 1과 문자 1 비교
console.log('1' == '1'); // true
// null과 undefined 비교
console.log(null == undefined); // true
결과는 모두 true가 나오는데, 보면 조금 이상한 부분이 있다. 두 번째 비교문에서 문자와 숫자를 비교했는데 true로 반환된 것이다. 네 번째 비교문에서도 null과 undefined는 타입이 다른데 true로 반환됐다.
이렇게 자바스크립트 인터프리터가 번역할 때 자동으로 문자를 숫자로 형변환시켜 비교한 것이 똑똑해 보일 수도 있지만, 철저히 비교해야 할 순간에 이런 자동 형변환은 문제가 생길 수 있다.
// 숫자 1과 숫자 1 비교
console.log(1 === 1); // true
// 숫자 1과 문자 1 비교
console.log(1 === '1'); // false
// 문자 1과 문자 1 비교
console.log('1' === '1'); // true
// null과 undefined 비교
console.log(null === undefined); // false
이번에 작성한 걸 보면, 두 번째 비교문에서 숫자 1과 문자 1이, 네 번째 비교문에서 null과 undefined가 false로 반환됨을 볼 수 있다. 자바스크립트에서는 타입이 따로 없는 대신, '==='이라는 비교문으로 타입을 구분하여 값을 비교할 수 있다!
소스 코드를 작성하며 가장 많이 쓰는 부분이 바로 조건문과 반복문이라고 생각한다. 이 조건문을 최대한 간결하게 작성해내는 것도 프로그래머의 실력과 경험인 것 같다.
조건문은 주어진 조건에 따라 실행 코드를 구분하는 것이다. 가장 흔하게 쓰이는 문법은 if...else를 활용하는 것이고, 조건이 구조적으로 나뉠 경우 switch 문법을 쓰기도 한다.
if문으로 시작하는 조건문이다. if문 뒤에 괄호를 적고, 그 안에 조건을 삽입한다. 조건절이 true일 경우 실행시키는 코드를 그 다음 줄에 작성한다.
// a가 숫자 1이면 a를 출력
let a = 1;
if (a === 1) {
console.log(a); // 1 출력
}
여러 개의 조건을 적고 싶으면 else if... 문법을 통해서 조건을 추가할 수 있다. 이 경우 작성한 순서대로 if 조건절을 검사하고 true면 바로 실행시킨다.
else 구문은 if 조건절 외 조건에 대해 실행시킨다.
// a가 숫자 1일 경우
if (a === 1) {
console.log('a is 1');
// a가 숫자 2일 경우
} else if (a === 2) {
console.log('a is 2');
// a가 숫자 1도 아니고, 숫자 2도 아닐 경우
} else {
console.log('a is ?');
}
if문으로 여러 개의 조건문을 만들 수 있지만, 때로는 switch 문법을 사용해서 이를 대체할 수 있다. switch문은 한 변수에 대해 조건이 여러가지 일 때 효과를 발휘한다.
// 숫자 변수 a에 대한 switch문
switch (a) {
case 1 : console.log(a); // 1 출력
break; // break를 통해서 case 1을 제외한 나머지 case는 무시
case 2 : console.log('a는 ', a); // a는 2 출력
break;
case 3 : console.log('마지막 a는 ', a); // 마지막 a는 3 출력
break;
}
case 뒤에 나오는 조건은 단순한 숫자와 문자외에도 여러 조건을 넣을 수 있다. 상황에 따라서 if문이나 swtich문을 활용하자!
알고리즘 문제를 풀 때 if문과 더불어 가장 많이 쓰이는 문법이다. 특정 해를 얻을 때까지 반복하는 경우가 대부분이며, 잘못 작성하면 무한 반복(infinite loop)에 빠진다...
프로그래밍 언어에서 자주 쓰이는 반복문으로 while문과 for문이 있다. 자바스크립트에서도 사용법은 동일하다
while 다음 조건절이 참(true)일 때 계속 반복되는 문법이다. 따라서 조건절이 무한루프에 빠지지 않게, false가 되는 조건을 반드시 넣어줘야 한다!
// 변수 a가 5일 때 반복문 종료
let a = 1;
while (a < 5) {
console.log(a); // 1 ~ 4까지 출력
a++; // 이 조건이 없으면 무한반복
}
do while이라는 약간 다른 형식의 문법도 있다. 이 때는 do라는 명령어를 통해 최소 한번은 코드를 실행시키고 반복문 조건에 따라 반복된다.
예시는 while문과 같아 보이지만, do를 통해서 최소 한 번 실행하는 것에 차이가 있다.
// 최초 a에서 1을 빼고 출력
let a = 1;
// do 내부 소스코드는 최소 한 번은 실행
do {
console.log(a); // 1 ~ 4 출력
a++;
} while (a < 5)
반복문하면 또 빠질 수 없는 것이 for문이다. while문에서 반복 횟수를 더 명확하게 설정했다고 보면 된다.
// 실행 코드를 5번 반복
for (let i = 0; i < 5; i++) {
console.log(i); // 0 ~ 4까지 반복
}
// while문을 동일하게 구현할 경우
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
[1] : for문에서도 for...in이나 for...of, forEach와 같은 응용 문법이 있다.