
Abstraction(추상화)을 통한 이해
프로그래밍 언어에서 Abstraction은
복잡한 세부 사항을 숨기고 핵심 개념만 드러내는
프로그래밍의 기본 원칙임.
Control Flow와 Control Structure는 프로그램의 Execution Path를 추상화하여 코드의 실행 순서와 동작을 체계적으로 관리할 수 있게 해 줌.
- Control Flow:
- 프로그램이 실행되는 경로의 제어를 가리킴: 즉, execution path를 결정함.
- 이는 이야기책을 읽을 때 순서대로 진행하거나 특정 페이지로 건너뛰는 방식과 유사함.
- Control Structure:
- Control Flow를 구현하는 구체적인 도구(command, statement)를 가리킴.
- "만약 A 조건이면 B 작업을 수행하고, 그렇지 않으면 C 작업을 수행한다"와 같은 논리를 코드로 표현할 수 있게 해 줌.
0. Control Flow의 개념
Control Flow는 프로그램 내 명령문이 실행되는 순서, 즉 Execution Path를 제어하는 것을 가리킴.
기본적으로 코드는 위에서 아래로 순차적으로 실행(sequential)되지만, Control Structure를 사용해 이 흐름을 변경할 수 있음.
참고로,
- Single Thread 환경에서는 하나의 Execution Path만 존재하지만,
- Multi-Thread 환경에서는 각 Thread가 독립적인 Control Flow(=Execution Path)를 가지며 병렬로 실행됨.
1. Control Structure의 분류
Control Structure는 Execution Path를 제어하는 프로그래밍 구문으로, 다음과 같이 분류됨:
1-1. Sequential Structure(순차 구조)
가장 기본적인 구조로, 명령문이 작성된 순서대로 위에서 아래로 실행됨.
모든 프로그래밍 언어가 기본적으로 지원한다고 생각해도 됨.
# C 언어
statement1;
statement2;
statement3;
1-2. Branch Structure(분기 구조)
Execution Path를 다른 경로로 변경하는 구조.
Turing completenss를 위해 필요한 branch 기능을 제공
크게 conditional branch와 unconditiopnal jump 로 나뉨:
1-2-1. Conditional Branch(조건부 분기)
조건에 따라 Execution Path가 달라짐:
if-else 문: 조건이 참이면 한 블록, 거짓이면 다른 블록을 실행.
// C 언어
if (x > 0) {
printf("Positive number\n");
} else if (x < 0) {
printf("Negative number\n");
} else {
printf("Zero\n");
}
# Python
if x > 0:
print("Positive number")
elif x < 0:
print("Negative number")
else:
print("Zero")
switch-case 문: 변수 값에 따라 여러 경로 중 하나를 선택합니다.
// C 언어
switch (day) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
default:
printf("Other day\n");
}
# Python (3.10 이상)
match day:
case 1:
print("Monday")
case 2:
print("Tuesday")
case _:
print("Other day")
# Python (이전 버전)
if day == 1:
print("Monday")
elif day == 2:
print("Tuesday")
else:
print("Other day")
Ternary Operator(삼항 연산자): 간단한 조건문을 한 줄로 표현.
// C 언어
result = (x > 0) ? "Positive" : "Non-positive";
# Python
result = "Positive" if x > 0 else "Non-positive"
Conditional Jump: 저수준 언어에서 사용되는 명령어
- 예: Assembly의 JZ, JNZ
1-2-2. Unconditional Jump(무조건 점프)
조건 없이 Execution Path를 변경:
break: 현재, Loop나 switch문을 즉시 종료.
// C 언어
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // i가 5일 때 loop 종료
}
printf("%d ", i);
}
// 출력: 0 1 2 3 4
# Python
for i in range(10):
if i == 5:
break # i가 5일 때 loop 종료
print(i, end=" ")
# 출력: 0 1 2 3 4
continue: 현재 iteration 실행을 건너뛰고 다음 iteration으로 이동.
// C 언어
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // i가 2일 때 해당 반복 건너뛰기
}
printf("%d ", i);
}
// 출력: 0 1 3 4
# Python
for i in range(5):
if i == 2:
continue # i가 2일 때 해당 반복 건너뛰기
print(i, end=" ")
# 출력: 0 1 3 4
return: Function 실행을 종료하고 값을 반환하면서 function call 이 이루어진 위치로 jump.
// C 언어
int max_value(int a, int b) {
if (a > b) {
return a; // a가 더 크면 a 반환 후 함수 종료
}
return b; // 그렇지 않으면 b 반환
}
# Python
def max_value(a, b):
if a > b:
return a # a가 더 크면 a 반환 후 함수 종료
return b # 그렇지 않으면 b 반환
goto: 특정 Label로 직접 이동 (현대 프로그래밍 언어에서는 사용을 지양함).
// C 언어
int i = 0;
start:
printf("%d ", i);
i++;
if (i < 5) {
goto start; // i가 5보다 작으면 start 레이블로 이동
}
// 출력: 0 1 2 3 4
Python에는 goto가 없음
1-3. Iteration/Loop Structure(반복 구조)
Turing completenss를 위해 필요한 looping 기능을 제공.
특정 조건이 만족될 때까지 코드 블록을 반복 실행:
for Loop: 반복 횟수가 정해진 경우 자주 이용되며, 초기화, 조건, 증감 등을 명시적으로 정의가능.
// C 언어
for (int i = 0; i < 5; i++) {
printf("%d ", i * i);
}
// 출력: 0 1 4 9 16
# Python
for i in range(5):
print(i * i, end=" ")
# 출력: 0 1 4 9 16
while Loop: 조건이 참인 동안 반복 실행.
// C 언어
int count = 0;
while (count < 5) {
printf("%d ", count);
count++;
}
// 출력: 0 1 2 3 4
# Python
count = 0
while count < 5:
print(count, end=" ")
count += 1
# 출력: 0 1 2 3 4
do-while Loop: 최소 한 번 실행 후 조건을 확인.
// C 언어
int i = 0;
do {
printf("%d ", i);
i++;
} while (i < 5);
// 출력: 0 1 2 3 4
// 조건이 처음부터 거짓인 경우에도 한 번은 실행됨
i = 10;
do {
printf("Executed once even though i = %d > 5\n", i);
} while (i < 5);
# Python에는 do-while이 없지만 유사하게 구현 가능
i = 0
while True:
print(i, end=" ")
i += 1
if i >= 5:
break
# 출력: 0 1 2 3 4
# 조건이 처음부터 거짓인 경우에도 한 번은 실행
i = 10
while True:
print(f"Executed once even though i = {i} > 5")
if i < 5:
continue
break
foreach Loop: Collection의 각 요소를 순회(언어별 문법 상이).
// C 언어는 native foreach가 없지만 배열은 for loop로 순회 가능
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
for (int i = 0; i < size; i++) {
printf("%d ", numbers[i]);
}
// 출력: 1 2 3 4 5
# Python - 리스트 순회
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num, end=" ")
# 출력: 1 2 3 4 5
2. 마무리
프로그래밍 언어마다 Control Structure의 문법은 다를 수 있지만, 기본 개념은 보편적임.
때문에 이러한 구조를 이해하고 적용하면 효율적이고 유지보수가 용이한 코드를 작성할 수 있음.
같이 보면 좋은 자료
보다 단순히 정리한 자료.
https://ds31x.blogspot.com/2023/07/basic-control-structures-and-control.html
Basic : Control Structures and Control Flow
Control Structure 프로그램을 구성하는 statement (=executable code)들이 실행되는 순서를 제어하는 방법을 abstraction한 것이 control structure이며 이를 통해 실행순서를 제어하는 것을 flow c...
ds31x.blogspot.com
'Python' 카테고리의 다른 글
| [DL] default collate_fn - PyTorch (0) | 2025.04.26 |
|---|---|
| [Py] importlib.metadata: Package 정보 확인 (0) | 2025.04.23 |
| [Py] import 의 종류. (0) | 2025.04.18 |
| [DL] PyTorch-Hook (0) | 2025.04.10 |
| [DL] torch.nn.Linear 에 대하여 (1) | 2025.04.10 |