C & C++ 기초 개념 정리(2) - Flow Control
Flow Control
프로그래밍에서 Flow of Control은 프로그램이 특정한 순서로 실행되도록 하는 것입니다. 이를 위해 조건문과 반복문을 사용하며, C++에서는 if-else
, switch
, while
, do-while
, for
등의 구조를 활용합니다
불리언 표현식(Boolean Expressions)
프로그래밍에서 조건을 평가할 때 Boolean Expression을 사용합니다. true
(참) 또는 false
(거짓)를 반환하는 표현식입니다.
비교 연산자
| 연산자 | 의미 | |——–|——| | ==
| 같음 | | !=
| 다름 | | <
| 작음 | | >
| 큼 | | <=
| 작거나 같음 | | >=
| 크거나 같음 |
논리 연산자
| 연산자 | 의미 | |——–|——| | &&
| 논리 AND (둘 다 참일 때만 참) | | \|\|
| 논리 OR (하나라도 참이면 참) | | !
| 논리 NOT (참이면 거짓, 거짓이면 참) |
1
2
3
bool result = (5 > 3) && (10 < 20); // true
bool isEqual = (4 == 4); // true
bool isNotEqual = (7 != 8); // true
이때 &&
의 우선순위가 ||
보다 높기 때문에 이를 유의해야 합니다. 이로 인해 실행 결과가 완전히 달라질 수 있습니다.
1
2
bool result1 = true || false && false; // true
bool result2 = (true || false) && false; // false
위의 예에서 result1
은 &&
가 먼저 평가되어 false && false
가 false
가 되고, 이후 true || false
가 true
가 됩니다. 반면, result2
는 괄호로 인해 true || false
가 먼저 평가되어 true
가 되고, 이후 true && false
가 false
가 됩니다.
연산자 우선순위 (Operator Precedence)
C++에서 연산자는 특정한 우선순위를 가지며, 이는 표현식이 평가되는 순서를 결정합니다. 연산자 우선순위를 이해하면 코드의 동작을 예측하고 오류를 방지할 수 있습니다.
우선순위 | 연산자 | 설명 | 결합 방향 |
---|---|---|---|
1 | () | 괄호 | 좌에서 우 |
2 | ++ , -- | 전위 증가/감소 | 우에서 좌 |
3 | * , / , % | 곱셈, 나눗셈, 나머지 | 좌에서 우 |
4 | + , - | 덧셈, 뺄셈 | 좌에서 우 |
5 | < , <= , > , >= | 비교 연산자 | 좌에서 우 |
6 | == , != | 동등성 비교 | 좌에서 우 |
7 | && | 논리 AND | 좌에서 우 |
8 | \|\| | 논리 OR | 좌에서 우 |
9 | = | 대입 연산자 | 우에서 좌 |
일반적으로 연산 → 논리 → 대입의 순서대로 우선순위를 갖습니다.
조건문 (Branching Mechanisms)
조건문은 특정 조건이 참인지 거짓인지에 따라 코드의 실행 흐름을 결정합니다.
if-else 문
if-else
문을 사용하여 조건을 평가하고 실행할 코드를 결정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
int hrs = 45;
double rate = 10.0;
double grossPay;
if (hrs > 40) {
grossPay = rate * 40 + 1.5 * rate * (hrs - 40);
} else {
grossPay = rate * hrs;
}
// grossPay == rate * 40 + 1.5 * rate * 5 == 475.0
중첩된 if-else
if
문 안에 또 다른 if-else
문을 포함할 수 있습니다.
1
2
3
4
5
6
7
if (speed > 110) {
if (speed > 130) {
cout << "You're really speeding!";
} else {
cout << "You're speeding.";
}
}
switch 문
switch
문은 여러 개의 선택지를 가지는 조건문으로, if-else
보다 더 직관적인 구조를 제공합니다.
1
2
3
4
5
6
7
8
9
10
switch (변수) {
case 값1:
// 값1일 때 실행되는 코드
break;
case 값2:
// 값2일 때 실행되는 코드
break;
default:
// 어떤 값에도 해당되지 않을 때 실행되는 코드
}
이때 break;
를 작성해주지 않으면 다음 case로 실행이 넘어가게 됩니다. 이를 fall-through라고 하며, 의도적으로 사용하는 경우도 있지만, 대부분의 경우에는 break;
를 명시적으로 작성하여 이를 방지해야 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
char grade = 'B';
switch (grade) {
case 'A':
cout << "Excellent!";
break;
case 'B':
cout << "Good Job!";
// break;가 없으면 아래 default로 넘어감
default:
cout << "Try harder!";
}
// Good Job!Try harder!
위 코드에서 grade
가 'B'
일 경우, Good Job!
출력 후 Try harder!
도 출력됩니다. 이를 방지하려면 case 'B':
에 break;
를 추가해야 합니다.
반복문 (Loops)
반복문은 특정 조건이 만족될 때까지 코드 블록을 반복 실행합니다.
while 문
while
문은 조건이 참인 동안 반복 실행됩니다.
1
2
3
4
5
int count = 0;
while (count < 3) {
cout << "Hello! ";
count++;
}
do-while 문
do-while
문은 최소 한 번 실행된 후 조건을 평가합니다.
1
2
3
4
5
int count = 0;
do {
cout << "Hello! ";
count++;
} while (count < 3);
while
문과 do-while
문은 반복문으로 사용되지만, 실행 흐름에서 차이점이 있습니다.
구분 | while 문 | do-while 문 |
---|---|---|
실행 조건 | 조건이 참일 때만 실행 | 최소 한 번은 실행된 후 조건을 평가 |
조건 평가 시점 | 반복문 실행 전에 조건을 평가 | 반복문 실행 후에 조건을 평가 |
문법 | 조건 뒤에 세미콜론; 이 필요 없음 | 조건 뒤에 세미콜론; 이 필요함 |
for 문
for
문은 반복 횟수가 정해져 있을 때 사용됩니다.
1
2
3
for (int i = 0; i < 3; i++) {
cout << "Hello! ";
}
해당 포스트는 서울대학교 전기정보공학부 정교민 교수님의 프로그래밍방법론 25-1학기 강의를 정리한 내용입니다.