본문 바로가기
목차
Python

[Programming] Control Flow 와 Control Structure

by ds31x 2025. 4. 23.
728x90
반응형

Abstraction(추상화)을 통한 이해

프로그래밍 언어에서 Abstraction은
복잡한 세부 사항을 숨기고 핵심 개념만 드러내는
프로그래밍의 기본 원칙임.

 

Control FlowControl 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

 

 

 

728x90

'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