문서 읽는 데 40분 · A3

A-3: 변수·자료·연산

목차 27
전체 7강 중 3강 · 개발 입문
난이도 · 입문

ℹ️코딩이 처음인 비전공자를 위한 첫 과목 — 컴퓨터의 원리와 “프로그래밍적 사고”를 먼저 잡아요. 선수 지식 없이 시작할 수 있어요.

안녕하세요, 홍순구 튜터입니다. 세 번째 시간이네요. 여기까지 오셨다는 건, 컴퓨터가 어떻게 일하는지(A-1)와 프로그램·언어가 무엇인지(A-2)를 이미 손에 넣으셨다는 뜻이에요. 오늘부터는 한 걸음 더 안으로 들어갑니다.

지난 시간 마지막에 약속을 하나 했어요. "다음 시간부터는 사고를 직접 글로 적기 시작한다"고요. 그 도구가 바로 의사코드입니다. 오늘 처음으로, 머릿속 생각을 의사코드라는 글로 옮겨 적어 볼 거예요. 겁먹지 마세요. 의사코드는 특정 언어 문법이 아니라 사람이 읽는 평범한 말이라, 한글로 또박또박 적으면 그게 곧 의사코드예요.

오늘 배울 건 프로그램의 가장 기본 재료 세 가지입니다. 값을 받아 계산해서 내보내는 흐름(입력→처리→출력), 값을 담아 두는 변수, 그리고 그 값을 가지고 따지고 묶는 연산이에요. 첫 시간에 본 "번호 붙은 사물함"에 드디어 이름표를 붙입니다.

텍스트
   오늘의 여정 — 변수·자료·연산

   ① 모든 프로그램의 뼈대 — 입력·처리·출력
   ② 값을 담는 상자에 이름을 붙이다 — 변수
   ③ 상자에 담기는 것의 종류 — 숫자·글자·참거짓
   ④ 값을 계산하는 법 — 산술 연산과 표현식
   ⑤ 참인지 거짓인지 따지는 법 — 비교 연산
   ⑥ 여러 조건을 묶는 법 — 그리고·또는·아니다
   ⑦ 배운 걸 의사코드 한 편으로 — 장바구니 계산기

①에서 프로그램이 일하는 큰 틀을 잡고, ②③에서 값을 담는 변수와 그 값의 종류를 봅니다. ④⑤⑥에서 값을 계산하고 따지고 묶는 세 연산을 배우고, ⑦에서 오늘 배운 걸 의사코드 한 편으로 묶어 직접 써 봅니다.

💡 오늘 수업의 핵심 — "모든 프로그램은 입력→처리→출력이라는 뼈대를 갖고, 그 값은 이름을 붙인 상자(변수)에 담겨 숫자·글자·참거짓으로 나뉘며, 산술(계산)·비교(참거짓 판단)·논리(조건 묶기) 연산으로 다뤄진다 — 이 모두를 특정 언어 문법이 아니라 의사코드로 적는다"

🎯 학습 목표

  • 모든 프로그램이 입력 → 처리 → 출력(IPO)이라는 뼈대를 가짐을 이해하고, 일상의 한 장면을 이 세 토막으로 나눠 설명합니다.
  • 변수가 "이름 붙인 상자"임을 알고, 값을 담고 바꾸는 과정을 의사코드(변수 ← 값)로 직접 적습니다.
  • 자료의 세 종류(숫자·글자·참거짓)와 세 연산(산술·비교·논리)을 구분하고, 비교·논리가 참/거짓이라는 값을 만든다는 것을 설명합니다.

Step 1: "모든 프로그램의 뼈대 — 입력, 처리, 출력"

A-2에서 프로그램을 "명령을 순서대로 적어 둔 것"이라고 했죠. 오늘은 그 명령들이 모이면 어떤 큰 틀을 이루는지부터 봅니다. 놀랍게도 세상 거의 모든 프로그램은 똑같은 뼈대를 갖고 있어요 — 입력 → 처리 → 출력입니다. 영어 앞글자를 따서 IPO라고 줄여 부르기도 해요(Input·Process·Output).

말은 거창하지만 내용은 단순해요. 바깥에서 값을 받아서(입력), 그 값으로 무언가 계산하고(처리), 결과를 바깥으로 내보낸다(출력). 그게 전부예요.

텍스트
   모든 프로그램의 세 토막

   입력:  바깥에서 값을 받는다
   처리:  받은 값으로 계산한다
   출력:  결과를 바깥으로 내보낸다

가장 친숙한 예가 지난 시간에 만난 자판기예요. 자판기가 하는 일을 이 세 토막으로 나눠 볼게요.

텍스트
   자판기로 보면 (똑같은 세 토막)

   입력:  동전을 넣고 버튼을 누른다
   처리:  안에서 어떤 음료를 줄지 고른다
   출력:  음료가 떨어져 나온다

동전을 넣고 버튼을 누르는 게 입력이고, 자판기가 "이 돈으로 이 음료를 내보내면 되는구나" 정하는 게 처리, 음료가 나오는 게 출력이죠. 우리가 만들 프로그램도 똑같아요. 계산기 앱은 숫자와 연산을 받아(입력), 계산하고(처리), 답을 화면에 보여줍니다(출력).

이 뼈대를 먼저 잡는 이유가 있어요. 앞으로 어떤 프로그램을 설계하든 "이건 무엇을 입력받아서, 어떻게 처리해서, 무엇을 출력하지?"를 먼저 물으면 길이 보이거든요. 오늘 배울 변수와 연산은 전부 이 가운데 토막, 처리를 담당하는 재료들이에요.

💡 한 줄 정리

모든 프로그램은 값을 받아(입력) 계산하고(처리) 결과를 내보내는(출력) 뼈대를 갖고, 오늘 배울 변수·연산은 그 가운데 '처리'를 맡는 재료다.

🙋 학생 질문 — "튜터님, 입력이 없는 프로그램도 있나요?"

네, 있어요. 예를 들어 "화면에 안녕하세요를 띄우는" 아주 단순한 프로그램은 바깥에서 받는 값 없이 곧장 출력만 해요. 받는 것 없이 그냥 결과를 내보내고 끝나는 거죠.

그러니 세 토막이 항상 다 있는 건 아니에요. 다만 적어도 하나, 출력은 거의 늘 있어야 의미가 있어요. 아무것도 안 내보내는 프로그램은 열심히 돌아도 우리가 결과를 알 수 없으니까요. IPO는 "반드시 셋 다 있어야 한다"는 법칙이 아니라, 프로그램을 바라볼 때 쓰는 든든한 틀이라고 생각하면 됩니다.

재밌게도, A-6에서 여러분이 직접 실행해 볼 첫 코드도 바로 이런 프로그램이에요. 입력 없이 화면에 글자 한 줄을 출력만 하는, 가장 단순한 프로그램이죠.


Step 2: "값을 담는 상자에 이름을 붙이다 — 변수"

처리를 하려면 값을 어딘가 담아 둬야 해요. "좋아요 수가 320이다", "사과 가격이 1500원이다" 같은 값들요. 이 값을 담아 두는 게 오늘의 주인공, 변수(variable)입니다.

첫 시간 기억을 꺼내 볼게요. 메모리는 번호 붙은 사물함이 줄지어 있는 거라고 했죠. 그리고 그때 살짝 예고했어요 — 변수란 그 사물함 칸에 이름표를 붙이는 것이라고요. 오늘 그 이름표를 직접 붙입니다.

1057번 칸 같은 번호는 외우기 어렵죠. 그래서 우리는 칸에 "나이" 같은 이름표를 붙여 두고, 번호 대신 이름으로 값을 넣고 꺼냅니다. 변수를 한 문장으로 정의하면 이래요 — 변수는 값을 담아 두고 이름으로 꺼내 쓰는 상자입니다.

텍스트
   변수 = 이름표를 붙인 상자

         나이
   ┌──────────┐
   │    25    │
   └──────────┘

   '나이' 라는 이름의 상자에 25 라는 값이 담겨 있다

이제 이걸 글로 적어 볼 차례예요. 드디어 의사코드의 첫 등장입니다. "나이라는 상자에 25를 넣어라"를 의사코드로는 이렇게 적어요.

텍스트
나이  25

화살표 가 핵심이에요. "오른쪽의 값을, 왼쪽 상자에 넣어라"라는 뜻입니다. 그래서 나이 ← 25는 "나이 상자에 25를 넣어라"가 돼요. 어렵지 않죠? 이게 바로 의사코드예요 — 특정 언어 문법이 아니라, 사람이 읽는 평범한 말로 적은 절차요.

변수의 진짜 힘은 값을 바꿀 수 있다는 데 있어요. "변할 수 있는 수"라서 변수라고 불러요. 상자 안의 값을 언제든 새 값으로 바꿔 담을 수 있습니다.

텍스트
좋아요_수  320
좋아요_수  좋아요_수 + 1

둘째 줄이 재밌어요. 오른쪽 좋아요_수 + 1먼저 계산해요. 지금 좋아요_수가 320이니 320 + 1 = 321이죠. 그 321을 다시 좋아요_수 상자에 넣어요. 그래서 이 한 줄이 끝나면 좋아요_수는 321이 됩니다. "지금 값에 1을 더해서 도로 담기" — 좋아요를 하나 더 받은 상황을 의사코드로 적으면 딱 이 모습이에요. 여기서 순서가 중요해요. 오른쪽을 먼저 계산하고, 그 결과를 왼쪽 상자에 넣는다. 늘 이 순서예요.

한 가지 미리 짚어 둘게요. 는 "같다"가 아니라 "넣어라"예요. 좋아요_수 ← 좋아요_수 + 1을 수학의 등호처럼 "어떤 수가 자기 자신 더하기 1과 같다"로 읽으면 말이 안 되죠. 하지만 "넣어라"로 읽으면 자연스러워요. 이 차이는 Step 5에서 다시 또렷해집니다.

💡 한 줄 정리

변수는 값을 담아 이름으로 꺼내 쓰는 상자이고, 의사코드 변수 ← 값은 "오른쪽 값을 왼쪽 상자에 넣어라"라는 뜻이라 값을 언제든 새로 바꿔 담을 수 있다.

🙋 학생 질문 — "튜터님, 상자 이름은 아무렇게나 지어도 되나요?"

규칙은 느슨하지만, 좋은 습관은 분명해요. 컴퓨터 입장에선 이름이 a든 x든 나이든 상관없어요. 그저 칸을 구분하는 이름표일 뿐이니까요. 하지만 사람을 위해서는 값의 뜻이 드러나는 이름이 훨씬 좋아요. 나중에 그 코드를 다시 읽을 나 자신을 위해서요.

a ← 25보다 나이 ← 25가, b ← 320보다 좋아요_수 ← 320이 한눈에 들어오죠. 지금 우리는 의사코드라 한글 이름을 마음껏 써요. 좋아요_수처럼 띄어쓰기 대신 밑줄을 쓰는 건, 이름 하나가 어디서 끝나는지 또렷하게 하려는 작은 약속이에요.

나중에 진짜 언어로 가면 이름에 쓸 수 있는 글자나 띄어쓰기에 제약이 생기기도 하는데, 그건 후속 언어 과목에서 각 언어의 규칙으로 배웁니다. 지금은 "뜻이 드러나게, 또박또박" 이 원칙만 가져가세요.


Step 3: "상자에 담기는 것의 종류 — 숫자, 글자, 참과 거짓"

상자에 값을 담는 법을 배웠어요. 그런데 상자에 담기는 값에도 종류가 있습니다. 우리가 일상에서 숫자와 글자를 구분하듯, 컴퓨터도 값의 종류를 구분해요. 이 종류를 자료형(자료의 형태)이라고 불러요. 입문 단계에서 알아 둘 종류는 크게 세 가지예요.

종류 무엇인가
숫자 셀 수 있고 계산할 수 있는 값 25 · 1500 · 3.14
글자 문자나 문장 (따옴표로 묶음) "재훈" · "안녕하세요"
참거짓 둘 중 하나뿐인 값 참 / 거짓

하나씩 볼게요. 숫자는 가장 익숙하죠. 나이 25, 가격 1500처럼 딱 떨어지는 수(정수)도 있고, 3.14나 키 175.5처럼 소수점이 있는 수도 있어요. 숫자는 더하고 빼고 곱하는 계산을 할 수 있습니다.

글자는 문자나 문장이에요. "재훈" 같은 이름, "안녕하세요" 같은 인사말요. 한 글자든 여러 글자든, 글자로 된 값은 보통 따옴표로 묶어서 "이건 글자야"라고 표시해요. 그래서 의사코드에서도 이름 ← "재훈"처럼 따옴표를 붙입니다. 여러 글자가 줄줄이 이어진 걸 문자열이라고도 불러요.

참거짓은 조금 낯설 거예요. 값이 딱 두 개뿐이에요 — (맞다) 아니면 거짓(아니다). "좋아요가 100을 넘었는가?"에 대한 답처럼, 예/아니오로 떨어지는 값이죠. 이 참거짓이 오늘 Step 5·6의 주인공이에요. 무언가를 비교하고 따지면 그 결과가 늘 이 참 또는 거짓으로 나오거든요.

왜 종류를 구분할까요? 종류마다 할 수 있는 일이 다르기 때문이에요. 숫자 3과 5는 더하면 8이 되죠. 그런데 글자 "3"과 "5"를 더하면? "35"처럼 이어 붙을 수도 있어요. 같은 "더하기"라도 종류에 따라 뜻이 달라지는 거예요. 그래서 컴퓨터는 "이 값이 숫자인지 글자인지"를 늘 신경 씁니다. 이 구분은 후속 언어 과목에서 훨씬 더 또렷한 규칙으로 만나게 돼요.

💡 한 줄 정리

값에는 숫자(계산 가능)·글자(따옴표로 묶는 문자·문장)·참거짓(참 또는 거짓 둘 중 하나)이라는 종류가 있고, 종류마다 할 수 있는 일이 달라서 구분한다.

🙋 학생 질문 — "튜터님, 전화번호는 숫자인가요, 글자인가요?"

아주 좋은 질문이에요. 정답은 "보통 글자로 다룬다"입니다. 의외죠? 전화번호는 분명 숫자로 되어 있는데 말이에요. 핵심은 계산을 하느냐예요.

전화번호 010-1234-5678로 우리가 더하기·빼기를 하나요? 안 하죠. 게다가 맨 앞의 0이 중요한데, 이걸 숫자로 다루면 010이 그냥 10이 되어 0이 사라져 버려요. 그래서 전화번호·우편번호처럼 "숫자 모양이지만 계산하지 않고, 적힌 모양 그대로가 중요한 값"은 글자로 다루는 게 보통이에요.

반대로 나이·가격·좋아요 수는 더하고 비교하니 숫자죠. "이 값으로 계산을 할까?"를 스스로 물어보면 종류가 보입니다. 계산하면 숫자, 모양만 중요하면 글자에 가까워요.


Step 4: "값을 계산하는 법 — 산술 연산과 표현식"

이제 상자에 담은 값들을 가지고 계산을 해볼 차례예요. 더하고 빼고 곱하고 나누는 이런 계산을 산술 연산이라고 불러요. 초등학교 산수와 똑같습니다. 다만 기호가 조금 달라요.

하고 싶은 것 기호 결과
더하기 + 3 + 5 8
빼기 - 10 - 4 6
곱하기 × 6 × 7 42
나누기 ÷ 20 ÷ 4 5
나머지 나머지 7 나머지 3 1

곱하기·나누기는 손으로 쓸 땐 ×·÷를 쓰지만, 컴퓨터 자판엔 그 기호가 없어요. 그래서 많은 언어가 곱하기에 *(별표), 나누기에 /(빗금) 같은 기호를 대신 쓰는데, 구체적인 표기는 후속 언어 과목에서 배워요. 우리는 의사코드에서 눈에 익은 ×·÷를 그대로 씁니다.

여기서 중요한 개념 하나가 나와요 — 표현식입니다. 3 + 5 같은 계산식을 표현식이라고 불러요. 표현식의 핵심은 계산되면 하나의 값이 된다는 거예요. 3 + 5는 계산되는 순간 8이라는 하나의 값으로 바뀝니다.

텍스트
   표현식은 계산되면 하나의 값이 된다

   3 + 5            8
   10 - 4           6
   1500 + 2800      4300

이게 왜 중요하냐면, 표현식이 하나의 값이 되니까 그걸 상자에 담을 수 있어요. Step 2에서 본 좋아요_수 ← 좋아요_수 + 1이 정확히 이거였어요. 오른쪽 좋아요_수 + 1이라는 표현식이 먼저 하나의 값(321)으로 계산되고, 그 값이 왼쪽 상자에 담긴 거죠.

장바구니 합계를 의사코드로 적어 볼게요. 사과·우유·빵을 담았다고 해봐요.

텍스트
사과값  1500
우유값  2800
빵값  3200
합계  사과값 + 우유값 + 빵값

마지막 줄에서 사과값 + 우유값 + 빵값이라는 표현식이 1500 + 2800 + 3200 = 7500으로 계산되고, 그 7500이 합계 상자에 담겨요. 이렇게 변수에 담은 값들을 연산으로 엮어 새 값을 만드는 게, 프로그램이 하는 일의 큰 부분이에요.

💡 한 줄 정리

산술 연산(+-×÷·나머지)으로 값을 계산하고, 3 + 5 같은 표현식은 계산되면 하나의 값(8)이 되어 변수 상자에 담을 수 있다.

🙋 학생 질문 — "튜터님, 나머지 연산은 대체 어디에 쓰나요?"

처음엔 "나눗셈의 나머지를 굳이 왜?" 싶죠. 그런데 의외로 쓸모가 많아요. 가장 흔한 게 짝수·홀수 가리기예요. 어떤 수를 2로 나눈 나머지가 0이면 짝수, 1이면 홀수죠.

"3명씩 조를 짜면 몇 명이 남나"도 나머지로 구하고, "지금 몇 초인지를 60으로 나눈 나머지로 시계의 초침 위치"를 구하기도 해요. 무언가를 일정한 크기로 나눌 때 몇 개가 남는지, 딱 맞아떨어지는지를 따질 때 나머지가 등장합니다.

지금은 "이런 연산도 있다" 정도만 알아 두면 충분해요. 실제로 짝수·홀수를 가려서 흐름을 가르는 건, 다음 시간(A-4)의 조건과 만나면 진가를 발휘합니다.


Step 5: "참인지 거짓인지 따지는 법 — 비교 연산"

산술 연산이 값을 계산했다면, 이번에 배울 비교 연산은 값을 따집니다. "이게 저것보다 큰가?", "둘이 같은가?"처럼요. 그리고 비교의 결과는 항상 둘 중 하나예요 — Step 3에서 만난 아니면 거짓.

따지고 싶은 것 기호 결과
크다 > 120 > 100
작다 < 80 < 100
크거나 같다(이상) 100 ≥ 100
작거나 같다(이하) 99 ≤ 100
같다 = 50 = 50
다르다 50 ≠ 70

예를 들어 좋아요 수가 120일 때 좋아요_수 ≥ 100을 따지면, 120은 100 이상이니 이에요. 만약 좋아요 수가 80이었다면 같은 비교가 거짓이 되죠. 비교 연산은 이렇게 "지금 값이 어떤 조건을 만족하는가"에 참/거짓으로 답해 줍니다.

여기서 한 가지 멋진 점이 있어요. 비교의 결과(참/거짓)도 하나의 값이라, 변수 상자에 담을 수 있어요.

텍스트
좋아요_수  120
인기글_여부  (좋아요_수 ≥ 100)

둘째 줄에서 좋아요_수 ≥ 100이 참으로 계산되고, 그 이 인기글_여부 상자에 담겨요. 그래서 인기글_여부 상자엔 지금 "참"이 들어 있죠. Step 3에서 "참거짓도 값이다"라고 한 게 바로 이 이야기예요.

여기서 꼭 짚을 게 있어요. 비교의 "같다"는 기호로 =를 쓰는데, 이게 Step 2의 (넣어라)와 헷갈리기 쉬워요. 둘은 완전히 다릅니다.

기호 읽는 법
오른쪽 값을 왼쪽 상자에 넣어라 "나이에 25를 넣어라"
= 양쪽이 같은지 따져라 "나이가 25와 같은가?" → 참/거짓

나이 ← 25는 명령이에요("넣어라"). 나이 = 25는 질문이고요("같은가?"). 하나는 상자를 채우고, 하나는 참/거짓을 묻습니다. 지금 이 구분을 또렷이 잡아 두면, 다음 시간에 "만약 ~이면"이라는 조건을 배울 때 아주 든든해요.

그리고 바로 그게 비교 연산의 진짜 쓸모예요. 오늘은 참/거짓을 그냥 상자에 담아만 봤지만, 다음 시간(A-4)부터는 이 참/거짓을 가지고 흐름을 가릅니다. "참이면 이 길로, 거짓이면 저 길로" 하고요. 오늘 만든 참/거짓이 다음 시간 갈림길의 신호등이 되는 거예요.

💡 한 줄 정리

비교 연산(><≥≤=≠)은 값을 따져 항상 참 또는 거짓을 내놓고, 그 참/거짓도 변수에 담을 수 있으며, (넣어라)와 =(같은가?)는 완전히 다른 기호다.

🙋 학생 질문 — "튜터님, 넣는 ←랑 같은지 보는 = 가 진짜 헷갈리는데, 왜 굳이 나눠요?"

정말 자주 나오는 혼란이라, 제대로 짚고 가는 게 좋아요. 둘을 나누는 이유는 하는 일이 정반대이기 때문이에요. 는 상자에 값을 채워 넣는 행동이고, =는 두 값이 같은지 묻는 질문이죠.

행동과 질문을 같은 기호로 쓰면 나이 = 25가 "넣어라"인지 "같은가 묻는 것"인지 알 수 없어요. 그래서 우리 의사코드는 넣기를 로, 같은지 묻기를 =로 또렷이 갈라 둡니다.

재밌는 건, 진짜 프로그래밍 언어들도 이 둘을 반드시 구분한다는 거예요. 많은 언어가 넣기엔 등호 하나, 같은지 묻기엔 등호 두 개를 써서 모양으로 갈라요. 기호 모양은 언어마다 달라도 "넣기와 비교는 다른 일"이라는 원칙은 똑같습니다. 그 진짜 문법은 후속 언어 과목에서 만나요. 지금은 우리 의사코드의 =로 그 감각을 미리 잡아 두는 거예요.


Step 6: "여러 조건을 묶는 법 — 그리고, 또는, 아니다"

비교 연산으로 참/거짓 하나를 만들 수 있게 됐어요. 그런데 현실의 판단은 조건이 여러 개일 때가 많죠. "좋아요가 100 이상 그리고 댓글이 10 이상이면 인기글"처럼요. 이렇게 여러 참/거짓을 묶는 게 논리 연산이에요. 세 가지만 알면 됩니다 — 그리고, 또는, 아니다.

  • 그리고(AND): 양쪽이 둘 다 참이어야 참. 하나라도 거짓이면 거짓.
  • 또는(OR): 양쪽 중 하나라도 참이면 참. 둘 다 거짓일 때만 거짓.
  • 아니다(NOT): 참과 거짓을 뒤집는다. 참은 거짓으로, 거짓은 참으로.

일상으로 느껴 볼게요. "지갑 그리고 휴대폰을 챙겼으면 외출 OK"라면, 둘 다 챙겨야 OK예요. 하나라도 빠지면 안 되죠. 반면 "버스 또는 지하철이 오면 탄다"라면, 둘 중 하나만 와도 탑니다.

표로 정리하면 이래요 (참은 O, 거짓은 X).

왼쪽 오른쪽 그리고 또는
O O O O
O X X O
X O X O
X X X X

이걸 의사코드로 써볼게요. 좋아요 120, 댓글 15인 글이 "인기글"인지 따져 봅시다(좋아요 100 이상 그리고 댓글 10 이상).

텍스트
좋아요_수  120
댓글_수  15
인기글_여부  (좋아요_수 ≥ 100) 그리고 (댓글_수 ≥ 10)

오른쪽을 풀어 보면, 좋아요_수 ≥ 100은 참이고(120은 100 이상), 댓글_수 ≥ 10도 참이에요(15는 10 이상). 참 그리고 참이니 전체가 참이죠. 그래서 인기글_여부엔 참이 담겨요. 만약 댓글이 5였다면? 오른쪽이 거짓이 되어, 참 그리고 거짓 = 거짓이 됩니다.

이렇게 비교(Step 5)로 참/거짓을 만들고, 논리(Step 6)로 그걸 묶으면, 꽤 복잡한 판단도 의사코드로 또박또박 적을 수 있어요. 이 참/거짓 판단들이 전부 다음 시간 "흐름 가르기"의 재료가 됩니다.

💡 한 줄 정리

논리 연산은 여러 참/거짓을 묶는다 — 그리고(둘 다 참이어야 참)·또는(하나만 참이어도 참)·아니다(참거짓 뒤집기).

🙋 학생 질문 — "튜터님, '또는'은 일상에선 '둘 중 하나만'인데, 둘 다 참이어도 참인가요?"

날카롭게 보셨어요. 바로 거기서 일상의 말과 프로그래밍의 '또는'이 살짝 갈려요. 일상에서 "커피 또는 차 드릴까요?"는 보통 둘 중 하나만 고르라는 뜻이죠. 그런데 프로그래밍의 또는(OR)은 "적어도 하나가 참이면 참"이에요. 그래서 둘 다 참이어도 참이 됩니다.

위 표에서 왼쪽·오른쪽이 둘 다 O일 때 또는의 결과가 O인 게 그 뜻이에요. 이걸 "포함하는 또는"이라고 불러요. 둘 다인 경우까지 포함하니까요.

"비가 오거나 추우면 외투를 입는다"를 생각하면 자연스러워요. 비도 오고 춥기까지 하면? 당연히 외투를 입죠. 둘 다여도 참인 게 말이 됩니다. 혹시 "정확히 둘 중 하나만 참"을 따지는 별도 연산도 있긴 한데, 입문 단계에서 꼭 필요하진 않으니 "또는은 둘 다여도 참" 이것만 또렷이 가져가세요.


Step 7: "배운 걸 의사코드 한 편으로 — 장바구니 계산기"

오늘 배운 걸 한자리에 모아, 작은 프로그램 하나를 의사코드로 처음부터 끝까지 써 볼게요. 장바구니에 담은 물건의 합계를 구하고, 일정 금액을 넘으면 무료배송인지 알려 주는 계산기예요. Step 1의 IPO 틀로 보면, 가격을 받아(입력), 합계와 무료배송 여부를 계산하고(처리), 결과를 보여주는(출력) 프로그램이죠.

텍스트
   ── 장바구니 계산기 (의사코드) ──

사과값  1500
우유값  2800
빵값  3200

합계  사과값 + 우유값 + 빵값
무료배송_여부  (합계 ≥ 30000)

"합계: " 와 합계 를 출력
"무료배송: " 와 무료배송_여부 를 출력

한 줄씩 따라가 볼게요. 위 세 줄은 세 물건의 가격을 각각 상자에 담는 입력이에요(여기선 값을 직접 적었지만, 실제로는 사용자가 값을 직접 입력하는 부분이죠). 그다음 합계 상자에 셋을 더한 값을 담고, 무료배송_여부 상자엔 "합계가 30000 이상인가?"의 참/거짓을 담아요. 이게 처리입니다. 마지막 두 줄이 결과를 보여주는 출력이고요.

머릿속으로만 따라가면 헷갈리니, 값이 어떻게 변하는지 표로 손수 따라가 볼게요. 이렇게 한 줄씩 실행하며 상자 안의 값을 적어 가는 걸 흔히 "손으로 따라가기"라고 해요.

실행한 줄 사과값 우유값 빵값 합계 무료배송_여부
사과값 ← 1500 1500
우유값 ← 2800 1500 2800
빵값 ← 3200 1500 2800 3200
합계 ← … 1500 2800 3200 7500
무료배송_여부 ← … 1500 2800 3200 7500 거짓

표 맨 아랫줄을 보면, 합계는 7500이고 무료배송_여부는 거짓이에요(7500은 30000 미만이니까요). 그래서 이 프로그램은 "합계: 7500"과 "무료배송: 거짓"을 출력하고 끝나요. 만약 물건을 더 담아 합계가 30000을 넘었다면, 무료배송_여부가 참으로 바뀌겠죠.

방금 우리가 한 게 꽤 중요해요. 머릿속 계산을 의사코드로 적고, 그 의사코드를 한 줄씩 손으로 따라가며 결과를 확인했어요. 이게 프로그래밍의 진짜 사고예요. 이 "손으로 따라가기"는 A-5에서 본격적으로 익혀, 프로그램이 틀렸을 때 어디서 틀렸는지 찾는 데까지 씁니다.

💡 한 줄 정리

IPO 틀 위에서 변수와 연산을 엮으면 작은 프로그램을 의사코드로 적을 수 있고, 값을 표로 손수 따라가면 그 프로그램이 무엇을 출력할지 정확히 알 수 있다.

🙋 학생 질문 — "튜터님, 이 의사코드를 진짜 코드로 바꾸면 어떻게 되나요?"

바로 그게 이 과목의 가장 든든한 점이에요. 오늘 적은 의사코드는, 후속 언어 과목에서 진짜 문법으로 거의 그대로 번역돼요. 합계 ← 사과값 + 우유값 + 빵값은 자바로 가든 파이썬으로 가든 거의 같은 모양의 한 줄이 됩니다. 넣기 기호와 변수 적는 규칙만 그 언어에 맞게 바뀔 뿐이에요. (합계 ≥ 30000) 같은 비교도 마찬가지고요.

그래서 사고를 의사코드로 먼저 잡아 둔 사람은, 진짜 언어를 만났을 때 "새로운 걸 처음 배운다"가 아니라 "알던 걸 그 언어 문법으로 옮긴다"가 돼요. A-2에서 "문법보다 사고가 먼저"라고 했던 게 이렇게 현실이 되는 거죠.

진짜 코드를 직접 화면에 띄워 보는 짜릿함은 A-6에서 한 줄로 맛봅니다. 조금만 더 사고를 다져 두면, 그때 훨씬 수월하게 첫 코드를 만나게 돼요.


마무리

세 번째 시간, 정말 잘 오셨어요. 오늘 우리는 프로그래밍의 기본 재료 세 가지를 손에 넣고, 처음으로 의사코드라는 글로 사고를 적어 봤습니다. 코드 한 줄 안 쳤는데도, 이미 작은 프로그램 한 편을 의사코드로 써냈어요. 이게 작은 일이 아니에요.

오늘 배운 핵심 세 가지

  1. 💡 모든 프로그램은 입력 → 처리 → 출력의 뼈대를 갖는다. 값을 받아(입력), 계산하고(처리), 결과를 내보낸다(출력). 오늘 배운 변수·연산은 그 가운데 '처리'를 맡는 재료다.
  2. 💡 변수는 이름을 붙인 상자다. 의사코드 변수 ← 값으로 값을 담고 바꾼다. 그 값에는 숫자·글자·참거짓이라는 종류가 있다.
  3. 💡 연산에는 세 종류가 있다. 산술(계산해서 값을 만든다)·비교(따져서 참거짓을 낸다)·논리(여러 참거짓을 묶는다). 비교와 논리가 만든 참/거짓이 다음 흐름의 재료가 된다.

다음 시간 예고

오늘 비교와 논리로 참/거짓을 만들었지만, 그걸 그냥 상자에 담아만 뒀어요. 다음 시간(A-4)에는 드디어 그 참/거짓을 가지고 흐름을 가릅니다. "만약 좋아요가 100 이상이면 인기글이라고 표시하고, 아니면 일반글이라고 표시한다" — 이렇게 조건에 따라 길이 갈라지는 거예요. 그리고 같은 일을 여러 번 되풀이하는 반복도 배웁니다. 이 갈라지고 되풀이되는 흐름을 그림으로 그리는 도구가 순서도인데, 다음 시간에 직접 그려 볼 거예요. 오늘 만든 참/거짓이 그 갈림길의 신호등이 된다고 했죠 — 다음 시간에 그 신호등을 켜 봅니다.


과제

오늘도 종이와 연필로 하는 연습이에요. 의사코드는 많이 적어 볼수록 익숙해지니, 부담 없이 직접 써 보는 게 핵심입니다.

[기초] 일상의 한 장면을 입력·처리·출력으로 나누기

매일 겪는 장면 하나를 고르세요(자판기에서 음료 뽑기·현금인출기에서 돈 찾기·라면 끓이기·계산대에서 결제하기 등). 그 장면을 입력 / 처리 / 출력 세 토막으로 나눠 적어 보세요. 무엇을 받아서(입력), 안에서 무슨 일이 일어나고(처리), 무엇이 나오는지(출력)를 한두 줄씩요. 다 적은 뒤, "이 장면엔 입력이 없네?" 또는 "출력이 두 개네?" 같은 게 보이면 그것도 적어 두세요. Step 1의 자판기 예시처럼 나눠 보는 게 목적입니다.

[응용] 친구 셋의 평균 키를 의사코드로 적기

친구 세 명의 키를 변수에 담고, 셋의 평균을 구해 출력하는 의사코드를 직접 써 보세요. 변수 세 개에 키를 담고(키1 ← 170 같은 식으로), 셋을 더해 합계를 구한 뒤, 그 합계를 3으로 나눠 평균 상자에 담고, 평균을 출력하면 됩니다. 다 적었으면 Step 7처럼 값을 표로 손수 따라가, 마지막에 평균 상자에 어떤 값이 들어가는지 직접 확인해 보세요. 산술 연산과 표현식을 쓰는 연습이에요.

[심화] 두 상자의 값을 맞바꾸기

상자 두 개가 있어요. 왼손 ← "사과", 오른손 ← "귤". 이제 이 둘의 내용을 맞바꿔서 왼손엔 귤이, 오른손엔 사과가 들어가게 하고 싶어요. 그런데 왼손 ← 오른손부터 해버리면, 왼손이 귤로 덮어써져서 원래 왼손에 있던 사과가 사라져 버립니다. 어떻게 하면 둘을 안전하게 맞바꿀 수 있을까요? 힌트: 양손에 물건을 든 채로 맞바꾸려면, 잠깐 내려놓을 빈 곳(임시 상자 하나)이 필요하지 않을까요? 임시 상자를 하나 더 써서 맞바꾸는 의사코드를 적고, 값을 표로 따라가며 정말 맞바뀌는지 확인해 보세요.


생각해볼 주제

정답이 하나로 떨어지지 않는 질문들이에요. 혼자 곰곰이 생각해도 좋고, 같이 공부하는 사람과 이야기 나눠도 좋습니다.

1. 변수 이름을 잘 짓는 게 왜 중요할까?

컴퓨터는 변수 이름이 a나이든 똑같이 일해요. 그런데도 사람들은 "이름을 잘 지으라"고 입을 모읍니다. a ← 25나이 ← 25, b ← a × 2이자 ← 원금 × 2 중 어느 쪽이 나중에 다시 봤을 때 이해하기 쉬울까요? 변수가 수십, 수백 개로 늘어난 큰 프로그램을 상상하면서, 이름 짓기가 왜 "컴퓨터를 위한 일"이 아니라 "사람을 위한 일"인지 생각해 보세요.

2. (넣어라)와 =(같은가?)는 왜 굳이 다른 기호일까?

오늘 우리는 값을 넣는 와 같은지 따지는 =를 다른 기호로 썼어요. 만약 둘을 같은 기호 하나로 합쳐 쓴다면 어떤 혼란이 생길까요? 나이 = 25라는 한 줄이 "25를 넣어라"인지 "25와 같은지 묻는 것"인지를 컴퓨터가 어떻게 구분할 수 있을까요? 행동(넣기)과 질문(비교)을 구분하는 게 왜 중요한지, 그 차이를 자기 말로 정리해 보세요.

3. 두 상자의 값을 맞바꾸려면 왜 빈 상자가 더 필요할까?

[심화] 과제에서 두 상자의 값을 맞바꿔 봤다면, 한 걸음 더 가볼게요. 양손에 물건을 하나씩 들고 있을 때, 손이 두 개뿐이면 둘을 동시에 맞바꾸기 어렵죠. 잠깐 내려놓을 빈 곳(탁자 위 같은)이 있어야 편해요. 변수도 똑같은 이유로 임시 상자가 필요합니다. "한 상자에 새 값을 넣으면 원래 값이 사라진다"는 점과, 그래서 "맞바꿈엔 임시 보관이 필요하다"는 점을 연결해 설명해 보세요. 이건 나중에 자료를 정렬하는 프로그램에서도 똑같이 만나는 중요한 감각이에요.

✅ 예시 답안정답 보기

이 문서는 A-3 「변수·자료·연산」의 과제와 생각해볼 주제에 대한 예시답안입니다. 정답을 외우는 용도가 아니라, 개념을 어떻게 내 말과 의사코드로 풀어내는지 흐름을 참고하는 용도로 보세요. 이 과목은 "정답"보다 "스스로 적어 보는 것"이 더 중요합니다.


과제 예시답안

🎯 [과제 1 예시답안] 일상의 한 장면을 입력·처리·출력으로 나누기

채점 포인트

항목 배점 기준
세 토막 분리 45% 한 장면을 입력·처리·출력으로 빠짐없이 나눴는가
각 토막의 내용 35% 무엇을 받고·계산하고·내보내는지 구체적으로 적었는가
스스로 발견한 점 20% 입력이 없거나 출력이 여럿인 점 등을 관찰해 적었는가

풀이 예시

"현금인출기에서 돈 찾기"를 골랐습니다.

텍스트
   입력:  카드를 넣고, 비밀번호와 찾을 금액을 누른다
   처리:  비밀번호가 맞는지 확인하고, 잔액이 충분한지 따지고, 금액만큼 잔액을 줄인다
   출력:  현금이 나오고, 화면에 남은 잔액이 뜨고, 명세표가 인쇄된다

스스로 발견한 점: 적고 보니 이 장면은 출력이 세 개(현금·화면 잔액·명세표)였어요. Step 1에서 "출력이 두 개네?" 같은 걸 찾아보라고 했는데, 실제로 하나의 처리가 여러 결과를 한꺼번에 내보낼 수 있다는 걸 알았습니다. 또 처리 안에 "비밀번호 확인"과 "잔액 확인" 같은 따지기(비교)가 들어 있다는 것도 보였어요. 오늘 배운 비교 연산이 처리 토막 안에서 실제로 쓰인 셈이에요.

💡 튜터의 한마디 — 아주 잘 나눴어요. 이 과제의 핵심은 "익숙한 일상도 입력·처리·출력으로 쪼개 보면 프로그램과 똑같은 뼈대가 보인다"를 느끼는 거예요. 특히 출력이 여러 개라는 걸 스스로 발견한 게 좋아요. 처리 안에 "맞는지 따지는" 비교가 숨어 있다는 것까지 봤다면, 오늘 수업을 제대로 연결한 거예요. 앞으로 어떤 앱을 보든 "얘는 뭘 받아서, 뭘 계산해서, 뭘 내보내지?"를 묻는 눈이 생기면 충분합니다.

🎯 [과제 2 예시답안] 친구 셋의 평균 키를 의사코드로 적기

채점 포인트

항목 배점 기준
변수에 담기 25% 세 친구의 키를 각각 변수에 담았는가
산술 연산 40% 합계를 구하고 3으로 나눠 평균을 올바로 계산했는가
손으로 따라가기 35% 값 추적 표로 최종 평균 값을 확인했는가

풀이 예시

텍스트
키1  170
키2  165
키3  178

합계  키1 + 키2 + 키3
평균  합계 ÷ 3

"평균 키: " 와 평균 을 출력

세 친구의 키를 각각 변수에 담고, 셋을 더해 합계를 구한 뒤, 그 합계를 3으로 나눠 평균 상자에 담았습니다. 이제 값을 표로 손수 따라가 볼게요.

실행한 줄 키1 키2 키3 합계 평균
키1 ← 170 170
키2 ← 165 170 165
키3 ← 178 170 165 178
합계 ← … 170 165 178 513
평균 ← … 170 165 178 513 171

표 맨 아랫줄을 보면, 합계는 513이고 평균은 171이에요(513 ÷ 3 = 171). 그래서 이 프로그램은 "평균 키: 171"을 출력합니다.

💡 튜터의 한마디 — 깔끔하게 잘 풀었어요. 핵심은 "합계를 먼저 구하고, 그다음 나눈다"는 순서를 변수로 또렷이 나눈 거예요. 평균 ← (키1 + 키2 + 키3) ÷ 3처럼 한 줄로 합쳐도 결과는 같지만, 합계를 따로 변수에 담으면 나중에 그 합계를 또 쓸 수도 있고 표로 따라가기도 쉬워요. 무엇보다 직접 표로 값을 쫓아 171이 나오는 걸 확인한 게 제일 중요합니다. 머리로 "되겠지"가 아니라 손으로 "되는구나"를 본 거니까요.

🎯 [과제 3 예시답안] 두 상자의 값을 맞바꾸기

채점 포인트

항목 배점 기준
덮어쓰기 문제 인식 30% 바로 넣으면 원래 값이 사라짐을 이해했는가
임시 상자 사용 45% 임시 상자를 써서 세 단계로 안전하게 맞바꿨는가
손으로 따라가기 25% 값 추적 표로 정말 맞바뀌는지 확인했는가

풀이 예시

먼저 왜 바로 맞바꾸면 안 되는지부터 짚었어요. 왼손 ← 오른손을 먼저 하면, 왼손의 "사과"가 "귤"로 덮어써져 사라져 버립니다. 그러면 오른손에 넣어 줄 사과가 어디에도 없죠. 그래서 사과가 사라지기 전에, 임시 상자에 잠깐 빼 두기로 했습니다.

텍스트
왼손  "사과"
오른손  "귤"

임시  왼손
왼손  오른손
오른손  임시

임시 ← 왼손으로 왼손의 사과를 임시 상자에 잠깐 빼 두고, 왼손 ← 오른손으로 왼손에 귤을 넣고, 마지막으로 오른손 ← 임시로 오른손에 임시에 빼 둔 사과를 넣었어요. 값을 표로 따라가 볼게요.

실행한 줄 왼손 오른손 임시
왼손 ← "사과" 사과
오른손 ← "귤" 사과
임시 ← 왼손 사과 사과
왼손 ← 오른손 사과
오른손 ← 임시 사과 사과

맨 아랫줄을 보면 왼손엔 귤, 오른손엔 사과가 들어 있어요. 처음과 정확히 맞바뀌었습니다.

💡 튜터의 한마디 — 정확해요. 이 문제의 진짜 교훈은 "상자에 새 값을 넣는 순간, 원래 값은 사라진다(덮어쓰기)"는 감각이에요. 그래서 두 값을 맞바꾸려면 한쪽을 잃기 전에 어딘가 잠깐 빼 둘 빈 상자가 필요하죠. 양손에 물건을 든 채로는 못 바꾸고, 탁자에 하나 잠깐 내려놔야 하는 것과 똑같아요. 이 "임시 상자로 맞바꾸기"는 나중에 자료를 크기순으로 정렬하는 프로그램에서 수도 없이 다시 만나는, 아주 기본이 되는 사고예요. 첫 만남을 손으로 또박또박 따라가며 익힌 게 두고두고 도움이 될 거예요.


생각해볼 주제 예시답안

🤔 [생각해볼 주제 1] 변수 이름을 잘 짓는 게 왜 중요할까

문제 상황 요약

컴퓨터는 변수 이름이 a나이든 똑같이 일한다. 그런데도 사람들은 "이름을 잘 지으라"고 입을 모은다. 변수가 수십, 수백 개로 늘어난 큰 프로그램을 떠올리며, 이름 짓기가 왜 "컴퓨터를 위한 일"이 아니라 "사람을 위한 일"인지 정리해 보는 주제다.

튜터의 가이드 및 해설

먼저 사실 하나를 분명히 하자. 컴퓨터에게 변수 이름은 아무 의미가 없다. 그저 칸을 구분하는 이름표일 뿐이라, a나이든 컴퓨터는 똑같이 정확하게 일한다. 여기까지만 보면 "그럼 짧게 a, b, c로 쓰는 게 편하지 않나?" 싶다.

그런데 코드는 한 번 쓰고 끝나는 게 아니다. 여러 번 다시 읽힌다. 며칠 뒤의 내가, 몇 주 뒤의 내가, 또는 같이 일하는 동료가 그 코드를 다시 열어 본다. 이때 b ← a × 2라고만 적혀 있으면, 며칠만 지나도 "a가 뭐였더라? b는 왜 두 배지?"를 다시 헤매게 된다. 반면 이자 ← 원금 × 2라고 적혀 있으면, 설명을 덧붙이지 않아도 무슨 계산인지 한눈에 들어온다. 좋은 이름은 코드가 스스로 자기를 설명하게 만든다.

이 차이는 프로그램이 커질수록 폭발적으로 벌어진다. 변수가 서너 개일 땐 a, b, c로도 그럭저럭 버틴다. 하지만 변수가 수백 개가 되면, 의미 없는 이름들 속에서 길을 잃는다. 어디서 무슨 값이 흐르는지 추적이 안 되고, 작은 수정 하나가 엉뚱한 곳을 망가뜨린다. 개발자들이 "읽기 좋은 코드"를 그토록 강조하는 이유가 여기 있다.

그래서 이름 짓기는 컴퓨터가 아니라 사람을 위한 배려다. 미래에 이 코드를 읽을 누군가(대개는 미래의 나 자신)에게 "이 상자엔 이런 값이 들었어"라고 친절히 일러 주는 쪽지인 셈이다. 컴퓨터는 어떤 이름이든 군말 없이 따르니, 그 자유를 사람이 읽기 쉬운 쪽으로 쓰는 게 좋은 습관이다.

💡 핵심을 한마디로

변수 이름은 컴퓨터가 아니라, 그 코드를 다시 읽을 사람(대개 미래의 나 자신)을 위한 것이다. 의미가 드러나는 이름은 설명을 덧붙이지 않아도 코드가 스스로 말하게 한다.

🤔 [생각해볼 주제 2] ←(넣어라)와 =(같은가?)는 왜 굳이 다른 기호일까

문제 상황 요약

오늘 우리는 값을 넣는 와 같은지 따지는 =를 다른 기호로 썼다. 만약 둘을 같은 기호 하나로 합쳐 쓴다면 어떤 혼란이 생길까? 행동(넣기)과 질문(비교)을 구분하는 게 왜 중요한지, 그 차이를 자기 말로 정리해 보는 주제다.

튜터의 가이드 및 해설

두 기호가 하는 일을 다시 떠올려 보자. 는 "오른쪽 값을 왼쪽 상자에 넣어라"라는 행동이고, =는 "양쪽이 같은가?"라고 묻는 질문이다. 하나는 상자를 채우는 일이고, 하나는 참 또는 거짓이라는 답을 얻는 일이다. 둘은 목적이 정반대다.

이제 둘을 같은 기호 하나로 합쳤다고 상상해 보자. 나이 = 25라는 한 줄을 만났을 때, 이게 "나이 상자에 25를 넣어라"라는 명령인지, "나이가 25와 같은지 묻는다"라는 질문인지 알 수가 없다. 사람이라면 앞뒤 맥락으로 눈치껏 짐작하겠지만, 컴퓨터는 그러지 못한다. 첫 시간에 배웠듯 컴퓨터는 시킨 것만 정확히 하는 기계라, 모호한 명령 앞에서는 멈추거나 엉뚱하게 동작한다. 컴퓨터에게 가장 나쁜 건 "둘 중 무엇인지 모르겠는" 상태다.

그래서 우리는 행동과 질문을 다른 기호로 또렷이 갈라 둔다. 넣기는 , 같은지 묻기는 =로 모양부터 다르게 해서, 한 줄만 봐도 "아, 이건 넣는 거구나" 또는 "이건 따지는 거구나"가 분명해지게 만드는 것이다. 모호함을 없애는 게 핵심이다.

재밌는 건 진짜 프로그래밍 언어들도 똑같은 고민을 한다는 점이다. 많은 언어가 넣기엔 등호 하나(=), 같은지 묻기엔 등호 두 개(==)를 써서 둘을 구분한다. 기호 모양은 우리 의사코드와 다르지만, "넣기와 비교는 반드시 다른 모양이어야 한다"는 원칙은 똑같다. 오늘 =로 그 감각을 잡아 두면, 나중에 진짜 언어에서 ===를 만나도 헷갈리지 않는다.

💡 핵심을 한마디로

넣기와 비교는 정반대의 일이라, 같은 기호로 합치면 명령인지 질문인지 모호해진다. 컴퓨터는 모호함을 못 견디는 기계이므로, 둘을 다른 기호로 또렷이 가르는 것이다.

🤔 [생각해볼 주제 3] 두 상자의 값을 맞바꾸려면 왜 빈 상자가 더 필요할까

문제 상황 요약

두 상자의 값을 맞바꾸려 할 때, 한쪽에 다른 쪽 값을 바로 넣으면 원래 값이 사라져 버린다. 그래서 임시 상자가 하나 더 필요하다. "한 상자에 새 값을 넣으면 원래 값이 사라진다"는 점과 "맞바꿈엔 임시 보관이 필요하다"는 점을 연결해 설명해 보는 주제다.

튜터의 가이드 및 해설

핵심은 변수의 한 가지 성질에 있다. 상자에 새 값을 넣는 순간, 원래 있던 값은 덮어써져 사라진다. 상자는 값을 하나만 담을 수 있어서, 새 값이 들어오면 옛 값은 흔적도 없이 밀려난다. 이걸 "덮어쓰기"라고 한다.

이제 왼손("사과")과 오른손("귤")을 맞바꾸는 상황에 이 성질을 대입해 보자. 성급하게 왼손 ← 오른손부터 하면, 왼손의 사과가 즉시 귤로 덮어써진다. 그 순간 사과는 완전히 사라진다. 이제 오른손에 사과를 넣어 주고 싶어도, 사과가 세상 어디에도 남아 있지 않다. 한쪽을 먼저 채우려다 원래 값을 잃어버린 것이다.

그래서 사과가 사라지기 전에, 잠깐 빼 둘 빈 곳이 필요하다. 임시 상자에 임시 ← 왼손으로 사과를 먼저 옮겨 두면, 이제 왼손을 귤로 덮어써도 사과는 임시 상자에 안전하다. 그다음 오른손에 임시의 사과를 넣으면 맞바꿈이 끝난다. 양손에 물건을 든 채로는 둘을 못 바꾸고, 탁자에 하나 잠깐 내려놔야 바꿀 수 있는 것과 똑같은 이치다. 손이 두 개뿐일 때 빈 탁자가 그 "임시 상자" 역할을 한다.

이 감각은 입문에서 끝나지 않는다. 나중에 자료를 크기순으로 줄 세우는 정렬 프로그램에서도, 두 값의 자리를 바꾸는 일이 수없이 일어난다. 그때마다 바로 이 "임시 상자로 맞바꾸기"가 등장한다. 그래서 지금 이 작은 문제를 손으로 따라가며 익혀 두는 게, 생각보다 멀리까지 쓰이는 든든한 밑천이 된다.

💡 핵심을 한마디로

상자에 새 값을 넣는 순간 원래 값은 덮어써져 사라진다. 그래서 두 값을 맞바꾸려면, 한쪽을 잃기 전에 잠깐 빼 둘 임시 상자 한 칸이 반드시 필요하다.

전체 목록 개발 입문