스파게티를 먹을 때 어떤 도구를 사용하시나요? 어떤 사람은 포크를 쓰고, 어떤 사람은 젓가락을 쓰겠죠. 포크를 쓸 때는 스파게티 면을 포크에 감아서 먹고, 젓가락을 사용할 때는 면을 젓가락으로 집어서 먹습니다. 이렇듯 어떤 도구를 사용하느냐에 따라 음식을 먹는 방법이 달라집니다.

프로그래밍을 할 때도 여러 가지 선택 가능한 대안 중에 어떤 대안을 선택할 것인지(처리할 것인지), 그 판단 기준은 무엇으로 할 것인지 등을 정할 수 있습니다.

 

 

 


 

✅선택하기 위한 필수 요소 두 가지

다음과 같은 상황을 가정해 보겠습니다. 오늘 집을 나서기 전에 오후부터 강한 비바람이 예정되어 있을 것이라는 일기 예보를 봤어요. 그런데 지금 하늘을 보니 햇볕이 너무 쨍쨍합니다. 잠시 고민에 빠집니다. ‘일기 예보를 믿고 우산을 가지고 나가려니 왠지 비는 내리지 않을 것 같고, 안 가지고 나갔는데 혹시 비가 내리면 어떡하지?’

 

위와 같은 선택의 순간에 놓여 있다면 여러분은 어떤 선택을 하시겠어요? 그 선택은 어떤 과정을 거쳐 결정될까요? 여기서는 선택의 과정을 다음과 같이 2단계로 나누어 설명하려고 합니다.

  • 1단계: 선택의 순간이 왔을 때 무엇을 선택할 수 있는지 가능한 모든 대안을 확인합니다.
  • 2단계: 각각의 대안을 선택하는 판단 기준이 무엇인지 확인합니다.

 

이제 우산을 가져갈지 말지 선택하는 과정을 하나씩 살펴보겠습니다.

 

1단계: 선택 가능한 모든 대안을 확인합니다.

앞서 제시한 상황에서 선택 가능한 모든 대안은 어떤 것이 있을까요? 다음과 같이 두 가지 대안을 생각해 보았습니다.

  • 우산을 가져간다.
  • 우산을 가져가지 않는다.

너무 간단하죠? 일반적으로 선택 가능한 대안을 찾는 과정은 이처럼 큰 어려움 없이 확인할 수 있습니다. 문제는 그 대안을 선택하게 만드는 판단 기준을 정하는 것이 어렵습니다.

 

 

2단계: 대안을 선택하는 판단 기준이 무엇인지 확인합니다.

선택 가능한 대안이 무엇인지 확인했다면 이제는 각각의 대안을 선택하는 판단 기준을 정해야 합니다. 예를 들면 다음과 같이 판단 기준을 정할 수 있습니다.

 “햇볕이 쨍쨍해 비가 올 것 같지 않지만 오늘은 중요한 면접이 있으니까 일기 예보를 믿고 우산을 챙겨야겠다.”

위 문장에서는 ‘중요한 일정이 있는지’가 판단의 기준이 됩니다. 중요한 면접이 있는 날이므로, 조금이라도 비가 올 가능성이 있다면 최대한 준비해서 비를 피해야 합니다.

 

 “강한 비바람이 예상된다고 했지만 오늘은 비 오는 거리를 느끼고 싶으니까 우산은 집에 두고 가야겠다.”

위 문장에서는 ‘개인의 심리 상태’가 판단의 기준이 됩니다. 비가 조금 올지라도 ‘그 정도 비는 맞아도 괜찮아’라고 생각한다면 굳이 우산을 준비하지 않습니다. 이처럼 세상을 살아가면서 어떤 대안을 선택하는 판단 기준은 상황에 따라 그때그때 다릅니다.

 

프로그래밍도 마찬가지입니다. 어떤 명령어를 컴퓨터에서 실행하도록 할지는 주어진 상황에 따라 판단 기준이 다릅니다. 다만, 프로그래밍을 할 때는 판단의 기준을 컴퓨터가 이해할 수 있도록 표현해야 합니다. 예를 들어 일상생활에서는 아래와 같이 표현할 수 있습니다.

 오늘은 중요한 일정이 있으니까, 우산을 가져가야지.
 오늘은 중요한 일정이 없으니까, 굳이 우산을 가져가지 않아도 되겠어.

 

그러나 컴퓨터는 인간이 하는 말을 이해할 수 없기 때문에 프로그래밍을 할 때는 어떤 판단 기준을 예(True) 또는 아니오(False)로 대답할 수 있는 질문 형태로 표현해야 합니다.

 오늘 중요한 일정이 있는가?
     (예, True) 있다면, 우산을 가져간다.
     (아니오, False) 없다면, 우산을 가져가지 않는다.

위와 같이 예/아니오로 대답할 수 있도록 판단의 기준을 질문 형태로 표현한 것을 조건식conditional expression 또는 불식boolean expression이라고 합니다.

 

만약 판단 기준이 ‘개인의 심리 상태’에 따른 것이면 다음과 같은 조건식으로 표현할 수 있습니다.

 오늘 심리 상태는 비를 맞아도 되는가?
     (예, True) 그렇다면, 우산을 가져가지 않는다.
     (아니오, False) 그렇지 않다면, 우산을 가져간다.

 

이렇게 표현된 조건식은 두 가지(예/아니오) 중 하나로 판단할 수 있고, 이 조건식의 판단 결과(예/아니오)를 앞서 다루었던 선택 가능한 대안에 연결할 수 있습니다.  예를 들면 ‘중요한 일정이 있는가?’라는 조건식과 선택 가능한 대안을 연결하면 다음과 같습니다.

 

조건식의 구조

 

이처럼 프로그래밍에서는 선택의 판단 기준이 되는 조건식을 만들고, 각 조건식의 결과(예/아니오)에 선택 가능한 대안을 연결해주는 것으로 선택의 과정을 처리해요. 이러한 방식의 프로그램 흐름을 선택 구조selection structure 또는 조건문conditional statement이라고 합니다.

 

 

마지막으로 정리를 해보자면,

  • 어떤 선택을 할 때는 ‘선택 가능한 대안에는 어떤 것이 있는가?’와 ‘각각의 대안을 선택하는 기준은 무엇인가?’를 고려해야 합니다.
  • 프로그래밍에서는 각 대안을 선택하는 기준을 예(True) 또는 아니오(False)로 대답할 수 있는 질문 형태로 표현해야 하고, 이렇게 표현된 것을 조건식이라고 합니다.
  • 조건식의 결과(예/아니오)와 선택 가능한 대안을 연결하는 방식으로 코딩하는 것을 선택 구조 또는 조건문이라고 합니다.

 

 

 


 

✅그림으로 표현하는 선택 구조, 순서도

이번에는 선택 구조를 그림으로 표현하는 방법을 알아보겠습니다. 그림으로 표현하면 복잡한 문제도 쉽게 풀 수 있거든요. 이렇게 문제 처리 과정을 그림으로 표현한 것을 순서도flowchart라고 합니다. 모든 프로그램의 처리 과정은 순서도로 그릴 수 있습니다. 만약 그림으로 표현할 수 없는 처리 과정이라면 아마도 그 프로그램은 오류 발생 가능성이 크기 때문에 프로그램을 처음부터 다시 설계하는 것이 좋습니다.

 

프로그램을 그림으로 표현하는 것은 어느 정도 정해진 규칙이 있습니다. 가장 많이 쓰이는 네 가지를 소개하겠습니다. 네 가지 요소만 사용해도 거의 모든 프로그램 처리 과정을 표현할 수 있어요.

  • 원◯: 프로그램의 시작과 끝을 알리는 용도로 사용됩니다.
  • 직사각형 □ 명령어의 처리를 의미합니다.
  • 마름모 ◇: 선택의 순간이 왔음을 의미합니다.
  • 화살표 ←↑→↓: 명령어의 처리 순서(흐름)를 의미합니다.

 

선택 구조 순서도

 

이제부터 우산을 가져가야 할지 말지를 선택하는 과정을 그림으로 표현해 보겠습니다. 일단 선택 구조를 두 가지 요소로 분리해야 합니다.

  • 조건식: 비가 내리는 중인가?
  • 선택 가능한 대안: 그렇다면(예) 우산을 가져간다. 그렇지 않으면(아니오) 우산을 가져가지 않는다.

 

 

01 프로그램 시작 표현하기: 프로그램의 시작을 표시하기 위해 원을 그리고 원 안에 ‘시작’이라는 글자를 적습니다. 그리고 다음 단계로 연결하기 위해 화살표를 아래 방향으로 그립니다. 

조건식 1

 

 

02 조건식 표현하기: 선택의 순간이 왔어요. 마름모 도형을 그린 다음 그 안에 ‘비가 내리는 중인가?’라고 판단 기준을 적습니다. 

조건식 2_조건식 표현하기

 

 

03 조건식 판단하기: 조건식의 판단 결과는 예 또는 아니오로 결정되기 때문에 처리의 흐름이 두 개로 분리됩니다. 그림과 같이 오른쪽으로 나가는 화살표와 밑으로 향하는 화살표를 그립니다.

  조건식 3_조건식 판단하기

 

 

04 조건식 분기하기: 그런 다음 오른쪽 화살표에는 ‘예(또는 True)’를 적어 주고, 아래쪽 화살표에는 ‘아니오(또는 False)’를 적습니다. ‘분기한다’는 조건식의 결과가 ‘예’인 경우에는 오른쪽에 있는 명령어가 처리되고, ‘아니오’인 경우에는 아래쪽의 명령어가 처리된다는 의미입니다.

조건식 4_분기하기

 

 

05 선택 가능한 대안 표현하기: 이제는 조건식의 판단 결과(예/아니오)에 선택 가능한 대안을 연결해 보겠습니다. ‘우산을 가져간다’는 대안을 직사각형 안에 적고, ‘예’의 결과로 이어지도록 화살표로 연결하세요. 마찬가지로 ‘우산을 가져가지 않는다’는 대안은 ‘아니오’의 결과로 연결합니다.

                                  조건식 5_선택 가능한 대안 표현하기

 

 

06 다음 단계 잇기: 이제 각각의 대안에 다음 단계로 향하는 화살표를 그립니다. 이때 주의할 것은 ‘우산을 가져간다’라는 대안의 다음 명령어를 가리키는 화살표는 ‘우산을 가져가지 않는다’라는 명령어를 건너뛰어야 한다는 것입니다.

                                  조건식 6_다음 단계 이어주기

 

 

07 프로그램 종료하기: 이제 프로그램의 종료를 표현하기 위해 동그라미를 그리고 그 안에 ‘끝’이라고 적습니다.

                    조건식 7_순서도 끝

 

 

이것으로 모든 처리를 그림으로 표현해 보았습니다. 이 내용은 나중에 프로그래밍을 할 때 실제 필요한 명령어로 적절하게 대체됩니다.

마지막으로 정리해보면,

  • 모든 프로그램 처리 과정은 그림으로 나타낼 수 있는데, 이 그림을 순서도라고 합니다.
  • 순서도를 그릴 때 화살표, 직사각형, 정사각형, 원, 이렇게 네 가지 요소를 가장 많이 사용합니다.

 

 

 


 

순서도를 그리는 이유는 여러 가지가 있지만, 다음 두 가지 측면에서 특히 유용하기 때문입니다.


1. 의도를 정확히 전달할 수 있습니다.
다른 사람과 함께 작업을 하는 경우 말이나 글자로 설명하면 때때로 오해가 생길 수 있습니다. 표현에 따라 상대방이 다르게 해석할 수 있기 때문이죠. 반면 순서도는 누가 보더라도 다르게 해석할 여지가 없어서 의도를 정확히 전달할 수 있습니다.


2. 복잡한 조건을 정리하는 데 도움이 됩니다.
실제 프로그래밍을 하다 보면 여러 조건을 결합해야 하는 경우가 많습니다. 이런 것을 중첩된(nested) 조건이라고 하는데, 중첩된 조건이 많을수록 오류가 발생할 가능성이 높아져요. 이럴 때 순서도를 그리면 구조를 한눈에 파악할 수 있어 오류를 줄일 수 있습니다.

 

 

 


혼자 공부하는 첫 프로그래밍 with 파이썬(개정판)_평면 표지

혼자 공부하는 첫 프로그래밍 with 파이썬이 입문자의 눈높이에 맞춰 인공지능 등 최신 기술을 소개하며 더욱 유익한 내용으로 업그레이드되었습니다.

<좀 더 알아보기>에 생성AI를 활용해 코딩하는 방법을 소개하는 내용이 추가되어 더욱 흥미롭게 프로그래밍의 세계를 탐험할 수 있습니다. 한발 더 나아가 <레벨 업>의 예제와 <도전 문제>를 풀며 응용력까지 챙겨보세요!

 

👀 도서 자세히 보기
✍️ 유튜브 강의
🙋 문현일 저자님과 함께하는 오픈 채팅방