study: javascript | 숨참고 deep dive (8) 제어문 - 221124

Lumpen·2022년 11월 23일
0

Study

목록 보기
11/92

제어문은 조건에 따라 코드를 실행하는 것
코드의 실행 순서가 변경되는 것이기 때문에 순차적으로 흐르는 직관적인 흐름을
혼란스럽게 만들 수 있다

forEach(), map() 등의 고차 함수를 사용한 함수형 프로그래밍 기법에서는
제어문을 억제하여 복잡성을 해결하기 위해 노력한다

1. 블록문

블록문은 0개 이상의 중괄호로 묶은 것으로 코드 블록이라고 부른다
자바스크립트는 블록문을 하나의 실행 단위로 취급한다
블록문은 단독 사용도 가능하지만 일반적으로 제어문이나 함수를 정의할 때 사용한다
블록문의 끝에는 세미콜론을 붙이지 않는다
블록이 자체종결성을 갖는 문법이기 때문

2. 조건문

주어진 조건식의 평가 결과 (boolean)에 따라 실행을 결정한다
자바스크립트는 if..else 와 switch 두 가지의 조건 문을 제공한다

2-1. if else

가드 패턴

if (조건식) {
	조건식의 평가 결과가 true면 실행
} else if (조건식 2) {
	조건식 1이 아니면서 조건식 2의 평가 결과가 true면 실행
} else {
 	다른 모든 경우에 실행 
}

if() 이후의 else if 와 else 는 사용하지 않아도 된다
각 조건식의 평가 타입이 boolean 이 아닐 시
암묵적 형변환을 통해 boolean 으로 변환 후 평가

블록 내에 문이 하나라면 중괄호 생략 가능

대부분의 if else 는 삼항연산자로 변환 가능

삼항연산자는 값으로 평가되는 표현식이고
if else 는 문이다
문은 값 처럼 사용할 수 없다

단순하면서 값을 변수에 할당하는 경우 삼항 연산자가 가독성이 좋고
복잡하면 if 문이 좋다
외의 경우에는 취향 차이, 리액트의 jsx 문법에서는 삼항 연산자만 가능

2-2. switch

쓸 일이 많이는 없는 것 같지만 - 그래도 좀 쓰임 enum type 등

switch 문은 조건식의 평가 결과가 boolean이 아닌 경우에 주로 사용되며
조건이 문자열이나 숫자 값 그 자체에 해당하는 경우에 실행할 문이 있으면 사용

switch (표현식) {
  case 조건1:
    조건 1에 대한 실행문
    break;
  case 조건2:
    조건 2에 대한 실행문
    break;
  default:
    해당하는 조건이 없을 경우 실행문

각 조건이 정확히 일치하는 경우에 실행되며
각 조건에 대한 실행 이후 break; 를 주지 않으면
다음 조건을 평가, 조건이 맞으면 실행한다
default 는 해당하는 조건에 맞는 경우가 없을 때 실행된다

개인적으로는 객체로 풀어내는 편이 좋은 것 같다

3. 반복문

조건식의 평가 결과가 참인 경우 코드 블록을 실행,
조건이 거짓일 경우가 되기 전 까지 반복 후 조건의 평가가 거짓일 경우 실행을 멈춘다
자바스크립트는 for, while, do ~ while 세 가지의 반복문을 제공한다

반복문 대체

forEach(), for..in, for...of 등을 지원한다

3-1. for 문

이터러블 문법보다 느리다고 함

조건식이 거짓으로 평가될 때 까지 코드 블록을 반복 실행한다

for (변수 선언 or 할당; 조건식; 증감식) {
	실행문
}

for 문의 변수 선언 or 할당문은 for 밖에서 해도 된다
반복문의 중첩도 가능하지만
다중첩이 되었을 경우 성능이 안좋다

3-2. while 문

주어진 조건식의 평가 결과가 참이면 코드를 무한정 실행한다
while은 조건 횟수가 불명확 할 때 주로 사용,
for 문은 조건 횟수가 명확할 때 주로 사용

주로 조건문을 넣어 조건이 맞을 때 break; 문으로 탈출한다

3-3. do... while 문

do 코드블록을 1회 실행 후 while 문을 실행한다

break 문

레이블 문, 반복문, switch문을 탈출할 때 사용한다
이외의 문에서 사용하면 SyntaxError

레이블 문

식별자를 지정한 문

foo: { // 식별자 지정
  console.log(1)
  break foo; // foo 탈출
  console.log(2)
}

중첩 for문에서 전체 for 를 탈출 할 때도 사용

레이블 문은 권장되지 않는 문법으로
복잡성만 증가.. 태어나서 처음 봄

3-4. continue 문

웬만하면 안쓴다

반복문의 증감식으로 실행 흐름을 옮긴다
말은 어렵지만 그냥 현재 코드 블록을 continue 기점으로 건너 뛰고
다음 차례 실행하라는 명령문
조건문과 함께 사용 각

break 처럼 탈출하는 것은 아니고 다음거 실행

if 문에서 잘 사용하면 코드 들여쓰기를 줄일 수 있다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글