본문 바로가기

공부/JavaScript

TCP school | 4. 제어문

17. 조건문

제어문(control flow statements) : 프로그램의 순차적인 흐름을 제어해야 할 때 사용하는 실행문.

조건문(conditional statements)

 : 표현식의 결과에 따라 별도의 명령을 수행하도록 제어하는 실행문.

1. if 문

 : 실행문이 한 줄이면 중괄호({}) 생략 가능.


2. if / else 문

 : 실행문이 한 줄이면 중괄호 생략 가능.


3. if / else if / else 문


4. switch 문

 : default 절은 어떠한 case 절에도 해당하지 않을 때 실행. 반드시 존재해야 하는 것은 아님. 반드시 마지막일 필요도 없음.

 : case 절과 default 절은 반드시 break 키워드를 포함하고 있어야 함.

 : break 키워드는 조건 값에 해당하는 case 절이나 default 절이 실행된 뒤에 switch 문을 빠져나가게 해줌.

switch (조건 값) {

    case 값1:

        조건 값이 값1일 때 실행하고자 하는 실행문;

        break;

    case 값2:

        조건 값이 값2일 때 실행하고자 하는 실행문;

        break;

    ...

    default:

        조건 값이 어떠한 case 절에도 해당하지 않을 때 실행하고자 하는 실행문;

        break;

}


18. 반복문(iteration statements)

반복문 : 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 실행문.

 

1. while 문

 : 특정 조건을 만족할 때까지(=표현식의 결과가 true인 동안) 주어진 실행문 반복.

 : 표현식이 true면 내부의 실행문 실행, 내부의 실행문 다 실행하고 나면, 다시 표현식으로 돌아와 표현식이 true인지 판단.

 : loop ; 표현식의 검사를 통해 반복해서 실행되는 반복문.

 : 실행문이 한 줄이면 중괄호({}) 생략 가능.

 

2. do / while 문

 : while 문과는 다르게 do / while은 먼저 루프를 한 번 실행한 후에 표현식 검사(표현식의 결과와 상관없이 무조건 한 번은 루프 실행)

 

3. for 문

 : 자체적으로 초기식, 표현식, 증감식을 모두 포함하고 있는 반복문.

 : 초기식, 표현식, 증감식은 각각 생략될 수 있음.

 : 쉼표 연산자(,)를 사용하면 여러 개의 초기식이나 증감식을 동시에 사용 가능.

 : 실행문이 한 줄이면 중괄호({}) 생략 가능.

 

4. for / in 문

 : for 문과는 완전 다름.

 : 해당 객체의 모든 열거할 수 있는 프로퍼티(enumerable properties)를 순회할 수 있도록 해줌.

열거할 수 있는 프로퍼티 : enumerable 플래그가 true로 설정된 프로퍼티

 : 루프마다 객체의 열거할 수 있는 프로퍼티의 이름을 지정된 변수에 대입.

 : 대입받은 변수를 이용하면 루프 안에서 객체의 열거할 수 있는 프로퍼티에 순차적으로 접근 가능.

 : 모든 프로퍼티를 반환하는 것이 아니라 오직 열거할 수 있는 프로퍼티만 반환.

for (변수 in 객체) {

    객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;

}

 : 배열의 요소에 접근.

var arr = [3, 4, 5];
for (var i = 0; i < arr.length; i++) { // 배열 arr의 모든 요소의 인덱스(index)를 출력함.
    document.write(i + " ");
}
for (var i in arr) { // 위와 같은 동작을 하는 for / in 문
    document.write(i + " ");
}

 : 객체의 프로퍼티에 접근.

var obj = { name : "이순신", age : 20 };
for (var i in obj) {
    document.write(i + "<br>");
}

 

5. for / of 문

 

 : 반복할 수 있는 객체(iterable objects)를 순회할 수 있도록 해주는 반복문.

반복할 수 있는 객체 : Array, Map, Set, arguments 객체 등.

 : 익스플로러에서 지원하지 않음.

 : 루프마다 객체의 열거할 수 있는 프로퍼티의 값을 지정된 변수에 대입함.

for (변수 of 객체) {
    객체의 모든 열거할 수 있는 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;
}

 : 배열의 요소에 접근.

var arr = [3, 4, 5];
for (var i = 0; i < arr.length; i++) { // 배열 arr의 모든 요소의 인덱스(index)를 출력함.
    document.write(arr[i] + " ");
}
for (var value of arr) { // 위와 같은 동작을 하는 for / of 문
    document.write(value + " ");
}

 : Set 객체의 프로퍼티에 접근.

var arr = new Set([1, 1, 2, 2, 3, 3]);
for (var value of arr) {
    document.write(value + " ");
}

19. 기타 제어문

루프의 제어

 : 보통 표현식의 검사를 통해 루프로 진입하면, 다음 표현식을 검사하기 전까지 루프 안에 있는 모든 실행문을 실행하는데, continue 문과 break 문은 일반적인 루프의 흐름을 사용자가 직접 제어할 수 있게 해줌.

 : label 문을 사용하면 continue 문과 break 문의 동작이 프로그램의 흐름을 특정 영역으로 이동시킬 수 있음.

 

label 문

 : 프로그램 내의 특정 영역을 식별할 수 있도록 해주는 식별자.

label:
식별하고자 하는 특정 영역

 : 다음 예제에서 라벨인 arrIndex는 그 이후에 나오는 for 문 전체를 가리키는 식별자로 사용.

arrIndex:

for (var i in arr) {

    document.write(i);

}

 

continue 문

 : 루프 내에서 사용하여 해당 루프의 나머지 부분은 건너뛰고, 바로 다음 표현식의 판단으로 넘어가게 함.

 : 반복문 내에서 특정 조건에 대한 처리를 제외하고자 할 때 사용.

1. continue;

2. continue 라벨이름;

 : 다음 예제는 1부터 100까지의 정수 중에서 3의 배수를 제외하고 출력하는 예제.

var exceptNum = 3;

for (var i = 0; i <= 100; i++) {

    if (i % exceptNum == 0// exceptNum의 배수는 출력하지 않음.

        continue;

    document.write(i + " ");

}

 : 다음 예제는 라벨을 이용하여 구구단의 값이 홀수인 경우에만 출력하는 예제.

gugudan:

for (var i = 2; i <= 9; i++) {

    dan:

    for (var j = 1; j <= 9; j++) {

        if ((i*j) % 2 == 0)

            continue dan;

        document.write(i + " * " + j + " = " + (i*j) + "<br>");

    }

}

 

break 문

 : 반복문 바로 다음에 위치한 실행문으로 흐름을 이동시키고, 루프 내에서 표현식의 판단 결과에 상관없이 원하는 값을 찾으면 반복문을 완전히 빠져나감.

 : 다음 예제는 라벨을 이용하여 구구단을 3단까지만 출력하는 예제

gugudan:
for (var i = 2; i <= 9; i++) {
    dan:
    for (var j = 1; j <= 9; j++) {
        if (i > 3)
            break gugudan;
        document.write(i + " * " + j + " = " + (i*j) + "<br>");
    }
}

'공부 > JavaScript' 카테고리의 다른 글

TCP school | 6. 함수  (0) 2021.03.19
Property(프로퍼티)  (0) 2021.03.18
TCP school | 3. 연산자  (0) 2021.03.18
TCP school | 2. 타입  (0) 2021.03.18
TCP school | 1. 자바스크립트 시작  (0) 2021.03.18