# 흐름 제어 (if, switch, for, while)

Dart의 흐름 제어문은 프로그램의 실행 흐름을 제어하는 데 사용된다. 이를 통해 조건에 따라 코드를 실행하거나 반복적으로 코드를 실행할 수 있다. Dart에서 제공하는 주요 흐름 제어문으로는 `if`, `switch`, `for`, `while`이 있다.

#### if 문

`if` 문은 주어진 조건이 참일 때 코드 블록을 실행하는 제어문이다. 기본 구조는 다음과 같다.

```dart
if (condition) {
  // 조건이 참일 때 실행되는 코드
} else if (otherCondition) {
  // 다른 조건이 참일 때 실행되는 코드
} else {
  // 모든 조건이 거짓일 때 실행되는 코드
}
```

**예제**

```dart
int age = 18;

if (age >= 18) {
  print("성인이다.");
} else {
  print("미성년자이다.");
}
```

이 예제에서, `age` 변수가 18 이상이면 "성인이다."라는 메시지를 출력하고, 그렇지 않으면 "미성년자이다."라는 메시지를 출력한다.

#### switch 문

`switch` 문은 여러 조건을 비교할 때 사용하는 제어문으로, `if-else if` 문을 간결하게 표현할 수 있다. `switch` 문은 값과 일치하는 `case` 블록을 찾아 실행하고, 일치하는 값이 없으면 `default` 블록이 실행된다.

**기본 구조**

```dart
switch (expression) {
  case value1:
    // value1에 해당하는 코드
    break;
  case value2:
    // value2에 해당하는 코드
    break;
  default:
    // 아무 것도 일치하지 않을 때 실행되는 코드
}
```

**예제**

```dart
String grade = 'B';

switch (grade) {
  case 'A':
    print('우수');
    break;
  case 'B':
    print('양호');
    break;
  case 'C':
    print('보통');
    break;
  default:
    print('재수강 필요');
}
```

위 예제에서 `grade` 변수가 'B'이므로 "양호"라는 메시지가 출력된다. 각 `case` 이후에는 `break` 문을 사용하여 실행을 중단해야 한다. 그렇지 않으면 다음 `case`로 계속 실행된다.

#### for 문

`for` 문은 일정 횟수만큼 코드를 반복 실행하는 제어문이다. 일반적으로 초기값, 조건식, 증감식을 사용하여 반복을 제어한다.

**기본 구조**

```dart
for (초기값; 조건식; 증감식) {
  // 반복할 코드
}
```

**예제**

```dart
for (int i = 0; i < 5; i++) {
  print('반복 횟수: $i');
}
```

위 예제에서는 `i`가 0부터 시작하여 5 미만일 때까지 반복하며, 매번 `i` 값을 출력한다. `i++`는 반복할 때마다 `i` 값을 1씩 증가시키는 역할을 한다.

#### while 문

`while` 문은 조건이 참일 때까지 코드를 반복 실행하는 제어문이다. 조건을 먼저 평가하고 참일 경우에만 코드가 실행된다.

**기본 구조**

```dart
while (조건식) {
  // 반복할 코드
}
```

**예제**

```dart
int count = 0;

while (count < 5) {
  print('현재 카운트: $count');
  count++;
}
```

이 예제는 `count` 변수가 5 미만일 때까지 "현재 카운트"를 출력하며, 매번 `count` 값을 1씩 증가시킨다.

#### do-while 문

`do-while` 문은 `while` 문과 유사하지만, 조건을 나중에 평가한다. 즉, 코드 블록이 먼저 실행된 후 조건을 검사하여 반복 여부를 결정한다. 따라서 적어도 한 번은 무조건 실행된다.

**기본 구조**

```dart
do {
  // 반복할 코드
} while (조건식);
```

**예제**

```dart
int count = 0;

do {
  print('현재 카운트: $count');
  count++;
} while (count < 5);
```

위 예제에서는 `count` 변수가 5 미만일 때까지 반복하면서 `count` 값을 출력한다. `do-while` 문에서는 `while` 문과 달리 코드가 먼저 실행된 후 조건을 검사한다.

#### 흐름 제어의 중첩

흐름 제어문은 다른 흐름 제어문 안에 중첩될 수 있다. 이를 통해 더 복잡한 논리를 구현할 수 있다. 예를 들어, `if` 문 안에 `for` 문을 넣거나 `switch` 문 안에 `if` 문을 넣는 방식이 가능한다.

**예제**

```dart
for (int i = 0; i < 3; i++) {
  if (i % 2 == 0) {
    print('$i는 짝수이다.');
  } else {
    print('$i는 홀수이다.');
  }
}
```

이 예제에서는 `for` 문 안에 `if` 문을 중첩하여 `i`의 값이 짝수인지 홀수인지 확인하고, 각각에 맞는 메시지를 출력한다.

#### break와 continue

흐름 제어문 내에서 `break`와 `continue`를 사용하여 반복을 제어할 수 있다.

* **break**: 반복문을 즉시 종료한다.
* **continue**: 이번 반복을 건너뛰고 다음 반복을 시작한다.

**예제: break**

```dart
for (int i = 0; i < 5; i++) {
  if (i == 3) {
    break;
  }
  print('반복 횟수: $i');
}
```

이 예제에서는 `i`가 3이 되면 `break` 문이 실행되어 반복이 종료된다. 결과적으로 `0`, `1`, `2`만 출력된다.

**예제: continue**

```dart
for (int i = 0; i < 5; i++) {
  if (i == 3) {
    continue;
  }
  print('반복 횟수: $i');
}
```

이 예제에서는 `i`가 3일 때 `continue` 문이 실행되어 그 이후 코드를 건너뛰고 다음 반복을 시작한다. 결과적으로 `3`은 출력되지 않고 `0`, `1`, `2`, `4`가 출력된다.
