콘텐츠로 이동

코스 3: Two Flow - 제어 흐름 마스터하기

코스 개요

이 코스는 프로그래밍의 두 가지 핵심 구조인 반복문과 조건문을 3D 게임 개발 맥락에서 심화 학습합니다. Pre Basics에서 배운 기초 위에, 실제 게임 로직을 만드는 데 필요한 제어 흐름을 마스터합니다. 게임의 규칙, 상태 변화, 반복적인 패턴을 코드로 표현하는 능력을 기릅니다.

예상 소요 시간: 8~16시간

소요 시간은 학생의 학년, 사전 경험, 학습 속도에 따라 크게 달라집니다. 또한 기본 개념만 익히고 넘어가는 경우와 추가 실습 문제나 창의적 프로젝트를 더 진행하는 경우에 따라서도 차이가 납니다. 위 시간은 평균적인 범위이며, 자녀의 페이스에 맞추어 유연하게 진행하시기 바랍니다.

어떤 능력을 키우게 되나요?

대량의 데이터를 자동으로 처리하는 능력을 훈련합니다. 빅데이터 시대에 수백만 개의 데이터를 하나씩 처리할 수는 없습니다. 반복문으로 데이터를 일괄 처리하고, 조건문으로 데이터를 분류하는 것이 모든 데이터 처리의 핵심입니다.

어떤 원리를 배우나요?

  • (데이터 일괄 처리) 반복문으로 수백 개의 객체를 한 번에 생성하면서, 대량 데이터를 효율적으로 처리하는 원리를 체험합니다. 엑셀의 수식을 아래로 드래그하는 것과 같은 원리입니다.
  • (데이터 분류) 조건문으로 데이터를 분류합니다. "점수가 90 이상이면 A, 80 이상이면 B" 같은 데이터 기반 분류 규칙은 스팸 필터, 추천 시스템, AI 분류기의 기본 원리입니다.
AI 시대 사고력: 컴퓨팅 (문제해결) | 데이터 기반 | 확률적 사고력

컴퓨팅 사고력 (Computational Thinking)

스킬 설명 활동 예시
🔄 반복 자동화 패턴을 코드로 자동 생성 100개 블록을 for문 하나로 생성
🔀 조건 분기 상황별 다른 처리 점수에 따라 A/B/C 등급 부여
수식 적용 수학 공식을 코드로 표현 position = (i * 2, 0, 0)
➡️ 코드 구조화 들여쓰기로 범위 정의 반복문/조건문 블록 구분

수학적 연결고리

수학 개념 프로그래밍 적용 학습 효과
일차함수 y = i * 2 + 1 기울기와 y절편 이해
등차수열 range(0, 20, 3) → 0, 3, 6, 9... 첫째항, 공차 개념
삼각함수 sin(i * 30) → 파동 패턴 주기, 진폭 시각화
나머지 연산 i % 2 → 짝수/홀수 판별 주기성, 배수 개념

패턴 생성 공식

패턴 코드 수학적 원리
일렬 배치 x = i * 2 등차수열: a_n = 2n
격자 배치 x = i % 5, y = i // 5 나눗셈, 나머지
원형 배치 x = cos(i*36°), y = sin(i*36°) 삼각함수, 원의 방정식
나선형 r = i, θ = i * 10° 극좌표, 아르키메데스 나선

조건문 논리 구조

# 학점 계산 - 수학적 범위 표현
if score >= 90:      # score ∈ [90, 100]
    grade = 'A'
elif score >= 80:    # score ∈ [80, 90)
    grade = 'B'
elif score >= 70:    # score ∈ [70, 80)
    grade = 'C'
else:                # score ∈ [0, 70)
    grade = 'F'
💻 코드 예시 & 시각화

예시 1: 일렬 배치 - 반복 변수 활용

from ursina import *

app = Ursina()

# 10개의 큐브를 일렬로 배치
for i in range(10):
    cube = Entity(
        model='cube',
        color=color.red,
        position=(i * 2, 0, 0)  # i에 따라 위치 변경
    )

app.run()

실행 결과:

i=0   i=1   i=2   i=3   i=4   i=5   i=6   i=7   i=8   i=9
┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐   ┌─┐
│■│   │■│   │■│   │■│   │■│   │■│   │■│   │■│   │■│   │■│
└─┘   └─┘   └─┘   └─┘   └─┘   └─┘   └─┘   └─┘   └─┘   └─┘
x=0   x=2   x=4   x=6   x=8   x=10  x=12  x=14  x=16  x=18

수학적 원리: position.x = i × 2


예시 2: 계단 모양 - 두 변수 활용

from ursina import *

app = Ursina()

# 계단 모양으로 배치
for i in range(5):
    cube = Entity(
        model='cube',
        color=color.orange,
        position=(i, i * 0.5, 0)  # x는 i, y는 i×0.5
    )

app.run()

실행 결과:

                      ┌─┐ i=4, y=2
                  ┌─┐ │■│
              ┌─┐ │■│─┘
          ┌─┐ │■│─┘ i=3, y=1.5
      ┌─┐ │■│─┘
      │■│─┘ i=2, y=1
  ┌─┐─┘
  │■│ i=1, y=0.5
┌─┘
│■│ i=0, y=0
─────────────────────


예시 3: 조건문으로 체스판 패턴

from ursina import *

app = Ursina()

for i in range(8):
    for j in range(8):
        # 홀짝에 따라 색상 변경
        if (i + j) % 2 == 0:
            tile_color = color.white
        else:
            tile_color = color.black

        tile = Entity(
            model='cube',
            color=tile_color,
            position=(i, 0, j),
            scale=(1, 0.1, 1)
        )

app.run()

체스판 패턴 원리:

i+j 의 합계:
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ j=0
├───┼───┼───┼───┼───┼───┼───┼───┤
│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ j=1
├───┼───┼───┼───┼───┼───┼───┼───┤
│ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ j=2
└───┴───┴───┴───┴───┴───┴───┴───┘
  i=0 i=1 i=2 ...

(i+j) % 2 결과:
┌───┬───┬───┬───┐
│ ◻ │ ◼ │ ◻ │ ◼ │  짝수=흰색
├───┼───┼───┼───┤  홀수=검정
│ ◼ │ ◻ │ ◼ │ ◻ │
├───┼───┼───┼───┤
│ ◻ │ ◼ │ ◻ │ ◼ │
└───┴───┴───┴───┘


예시 4: 조건문으로 색상 그라데이션

from ursina import *

app = Ursina()

for i in range(10):
    # i에 따라 빨강에서 파랑으로 변화
    r = 1 - (i / 10)  # 1.0 → 0.0
    b = i / 10        # 0.0 → 1.0

    cube = Entity(
        model='cube',
        color=color.rgb(r, 0, b),
        position=(i * 1.5, 0, 0)
    )

app.run()

색상 변화:

i=0   i=1   i=2   ...  i=8   i=9
🟥    🟪    🟪    ...  🟦    🟦
빨강 ─────────────────────→ 파랑

R값: 1.0  0.9  0.8  ...  0.1  0.0
B값: 0.0  0.1  0.2  ...  0.8  0.9


예시 5: 원형 배치 - 삼각함수

from ursina import *
import math

app = Ursina()

num_cubes = 12  # 12개의 큐브
radius = 5      # 반지름

for i in range(num_cubes):
    angle = math.radians(i * 30)  # 30도 간격 (360/12)

    x = math.cos(angle) * radius
    z = math.sin(angle) * radius

    cube = Entity(
        model='cube',
        color=color.orange,
        position=(x, 0, z)
    )

app.run()

원형 배치 원리:

          90° (π/2)
        ■       ■
      ■           ■
180° ■      ●      ■ 0°
      ■           ■
        ■       ■
         270° (3π/2)

x = cos(θ) × 반지름
z = sin(θ) × 반지름

θ = 0°:   x = 5, z = 0
θ = 90°:  x = 0, z = 5
θ = 180°: x = -5, z = 0

플로우차트:

flowchart TD
    A[i = 0] --> B[angle = i × 30°]
    B --> C[x = cos angle × r<br/>z = sin angle × r]
    C --> D[큐브 생성<br/>position x, z]
    D --> E{i < 12?}
    E -->|예| F[i = i + 1]
    F --> B
    E -->|아니오| G[완료! 🎉]


챕터 01: For 반복문 심화

A. 반복문이란?

항목 내용
무엇을 배우나요? 반복의 개념과 필요성 재확인
핵심 개념 자동화, 효율성, 패턴 인식

반복문은 같은 작업을 여러 번 수행해야 할 때 사용합니다. 100개의 별을 그리려면 같은 코드를 100번 쓰는 대신 반복문 하나로 해결할 수 있습니다. 학생들은 "이 작업이 반복되는가?"라는 질문을 통해 패턴을 인식하는 능력을 기릅니다. 게임에서 적 10마리를 생성하거나, 인벤토리 칸 20개를 만들 때 반복문이 필수입니다. 컴퓨터의 진정한 힘은 반복 작업을 지치지 않고 수행하는 데 있습니다.


B. range() 숫자 공장

항목 내용
무엇을 배우나요? range 함수의 다양한 활용법
핵심 개념 시퀀스 생성, 매개변수 활용

range()숫자 시퀀스를 생성하는 공장입니다. range(10)은 0부터 9까지, range(5, 10)은 5부터 9까지, range(0, 10, 2)는 0, 2, 4, 6, 8을 생성합니다. 학생들은 시작값, 끝값, 증가값을 유연하게 조절하는 방법을 배웁니다. 3D 그리드를 만들 때 range(-5, 6)으로 중앙을 기준으로 대칭적인 구조를 만들 수 있습니다. 이 유연성은 다양한 패턴과 구조를 효율적으로 생성하는 데 핵심입니다.


C. 변수 i 바구니

항목 내용
무엇을 배우나요? 반복 변수의 동적 활용
핵심 개념 인덱스, 동적 계산, 배치

반복 변수 i현재 반복 횟수를 담는 바구니입니다. 이 값을 위치 계산에 사용하면 position=(i * 2, 0, 0)처럼 일정 간격으로 객체를 배치할 수 있습니다. 학생들은 수학적 공식을 사용해 규칙적인 패턴을 만드는 방법을 배웁니다. 원형 배치(sin, cos 사용), 계단식 배치 등 다양한 패턴을 만들 수 있습니다. 이 기술은 게임의 레벨 디자인, UI 배치 등에 직접 활용됩니다.


D. 들여쓰기

항목 내용
무엇을 배우나요? Python 코드 블록의 범위 정의
핵심 개념 코드 구조, 스코프, 가독성

Python에서 들여쓰기는 문법의 일부입니다. 반복문 안에서 실행될 코드는 반드시 들여쓰기되어야 합니다. 학생들은 들여쓰기가 코드의 구조와 흐름을 결정한다는 것을 이해합니다. 들여쓰기 오류는 초보자가 가장 많이 겪는 문제 중 하나로, 이를 극복하면 코드 구조 파악 능력이 향상됩니다. 일관된 들여쓰기(보통 4칸 공백)는 가독성과 유지보수성을 높입니다.


E. 계산식 활용

항목 내용
무엇을 배우나요? 수학 공식으로 위치와 크기 계산
핵심 개념 수학적 모델링, 함수 활용

반복 변수와 수학 공식을 결합하면 복잡한 패턴을 생성할 수 있습니다. sin(i * 30)으로 파동, i ** 2로 가속 효과, i % 3으로 주기적 패턴을 만듭니다. 학생들은 프로그래밍이 수학을 실제로 활용하는 도구임을 체험합니다. 나선형 계단, 회전하는 팬, 물결치는 바다 등 시각적으로 인상적인 결과를 만들 수 있습니다. 이 경험은 수학에 대한 흥미와 실용성 인식을 높입니다.


챕터 02: 조건문 심화

A. If문이란?

항목 내용
무엇을 배우나요? 조건에 따른 분기 처리
핵심 개념 의사결정, 분기, 불리언 논리

if문은 프로그램이 "만약 ~라면"을 판단하게 합니다. 게임에서 "체력이 0이면 게임 오버", "아이템을 먹으면 점수 증가" 같은 규칙을 표현합니다. 학생들은 게임의 규칙을 코드로 번역하는 방법을 배웁니다. 조건이 참(True)일 때만 특정 코드가 실행되는 선택적 실행을 이해합니다. 이것은 인터랙티브 프로그램의 핵심 구조입니다.


B. Else문

항목 내용
무엇을 배우나요? 조건이 거짓일 때 대안 처리
핵심 개념 이진 분기, 대안 처리

else"그렇지 않으면"을 처리합니다. "점수가 100 이상이면 승리 메시지, 그렇지 않으면 격려 메시지"처럼 두 가지 경우를 모두 처리합니다. 학생들은 모든 가능성을 빠짐없이 고려하는 사고 방식을 기릅니다. 예외 상황을 처리하지 않으면 프로그램이 예상치 못하게 동작할 수 있습니다. 방어적 프로그래밍의 기초를 배우기 시작합니다.


C. Elif문

항목 내용
무엇을 배우나요? 세 가지 이상의 경우 처리
핵심 개념 다중 분기, 순차적 조건 검사

elif(else if)는 여러 조건을 순차적으로 검사합니다. 학점 계산(A, B, C, D, F), 게임 난이도 선택(쉬움, 보통, 어려움) 등 세 가지 이상의 경우를 처리합니다. 학생들은 조건의 순서가 중요하다는 것을 배웁니다 - 먼저 검사된 조건이 참이면 나머지는 건너뜁니다. 복잡한 의사결정 과정을 체계적으로 코드화하는 능력을 기릅니다.


D. 비교 연산자

항목 내용
무엇을 배우나요? 다양한 비교 방법
핵심 개념 관계 연산, 불리언 결과

==, !=, <, >, <=, >=두 값을 비교하여 참/거짓을 반환합니다. ==(같다)와 =(할당)의 차이를 이해하는 것이 중요합니다. 문자열 비교, 숫자 비교, 객체 비교 등 다양한 타입에 적용할 수 있습니다. 학생들은 정확한 조건을 작성하여 의도한 대로 프로그램이 동작하게 합니다. 경계값(boundary) 테스트의 중요성도 배웁니다 - < 10<= 10의 차이처럼요.


E. 게임에서 조건문 활용

항목 내용
무엇을 배우나요? 실제 게임 로직 구현
핵심 개념 게임 상태, 이벤트 처리, 규칙 구현

게임은 조건문의 집합이라고 할 수 있습니다. 충돌 감지("적과 닿으면 데미지"), 승리/패배 조건("점수 1000 달성"), 상태 변화("스페이스바 누르면 점프") 등 모든 게임 규칙이 조건문으로 표현됩니다. 학생들은 게임을 플레이할 때 "이 규칙은 어떻게 코딩했을까?" 생각하게 됩니다. 복잡한 게임도 작은 조건문들의 조합이라는 것을 이해하면, 큰 문제도 작은 부분으로 나눌 수 있다는 자신감을 얻습니다.


이 코스를 마치면...

학습 성과

학생들은 다음 능력을 갖추게 됩니다:

  • 복잡한 반복 패턴을 설계하고 구현할 수 있음
  • 다중 조건 분기를 체계적으로 작성할 수 있음
  • 게임의 규칙을 조건문으로 번역할 수 있음
  • 수학 공식을 활용해 동적인 배치와 패턴을 만들 수 있음
  • 코드의 들여쓰기와 구조를 올바르게 작성할 수 있음
  • 더 복잡한 게임 로직(물리 엔진, AI 등)을 배울 준비가 됨