brunch

You can make anything
by writing

C.S.Lewis

by 스스로 코딩 두셀코 Nov 29. 2017

코딩 기초 개념 이해하기 - 조건문

만약에 ~ 라면...

시작하기 : 프로그램 실행 순서


우리가 지금까지 변수와 연산자에 대해서 배워봤어요. 굳이 복습을 다시 하지 않아도 되겠죠?


다음과 같은 미션이 있다고 합시다.


대청소를 하세요.  대청소는 가장 먼저 창문을 열고, 침대 시트를 벗기고, 세탁기를 돌린 다음, 빗자루질을 하고, 걸레질을 하고, 빨래를 널고, 창문을 닫는 순서로 합니다. 단, 날씨가 맑을 때만 청소를 합니다. 


여러분들이 직접 하긴 귀찮으니까 코코넛봇을 시켜볼까요? 그러면 코코넛봇이 대청소하는 프로그램을 만들면 되겠죠? 

1. 창문을 연다
2. 침대 시트를 벗긴다
3. 침대 시트를 세탁기에 넣고 돌린다
4. 빗자루질을 한다
5. 걸레질을 한다
6. 세탁기에서 침대 시트를 꺼내서 빨래를 넌다
7. 창문을 닫는다


그럼 여기서 퀴즈!

위 코드는 어떤 순서로 실행이 될까요?

(1) 위에서 아래로
(2) 아래에서 위로
(3) 무작위로
(4) 뭐 어떻게든 되겠지


너무 당연한 질문이었나요? 정답은 바로 (1) 위에서 아래로 입니다. 창문을 열지도 않았는데 닫을 수도 없고, 침대 시트를 세탁기에 넣지도 않았는데 빨래를 널 순 없겠죠? 


기본적으로 컴퓨터는 위에서 아래로 코드를 한 줄 한 줄 읽으면서 순차적으로 실행을 하게 됩니다.


누군가 여러분에게 '컴퓨터 프로그램이 무엇이냐!' 물어보면 다음과 같이 설명을 해도 됩니다. 


프로그램이란, 입력값을 받아서 순서대로 명령어를 실행을 시킨 다음 출력값을 만드는 것입니다. 


하지만 여기서 문제가 생깁니다. 


항상 같은 입력값이 들어오진 않겠죠? 만약에 입력값이 달라졌을 때 프로그램도 다시 바뀌고, 우리가 새로운 프로그램을 만들어야 한다면 너무 불편하지 않을까요?


위에 나왔던 예시에서 '날씨가 맑으면 대청소를 해라'라는 조건이 생겼다고 가정하면, 우리는 날씨가 맑을 때의 프로그램을 만들고, 날씨가 맑지 않을 때의 프로그램을 따로 만들어야 할까요?


그렇게 하면 너무나 불편하고 효율적이지 않다는 것을 알았기 때문에, 모든 프로그래밍 언어에서는 '조건문'을 사용하고 있습니다.



조건문이란?


구구절절 앞에서 얘기한 것에 비해서 조건문은 그렇게 어려운 개념이 아닌데요, 간단하게 말하자면 "만약에 ~ 라면 코드 부분을 실행해라"인 것입니다.


조건문을 만족할 때만 특정 코드를 실행하고,
만족하지 않으면 특정 코드를 실행하지 않고 '점프' 합니다

맨 처음에 얘기한 '프로그램은 순서대로 명령어를 실행한다' 하고 약간은 다른 개념이죠? 기본적으로 순서대로 실행을 하되 특별한 경우라고 생각하면 될 것 같아요 :) 



조건문의 구성 1. 기본 구성


그러면 조건문은 어떻게 구성이 되어있을까요?


1. 참과 거짓으로 구분 지을 수 있는 조건 (조건부)


조건부는 코드를 실행할지 안 할지 참/거짓으로 판단할 수 있는 조건을 뜻합니다. 예를 들어, '1이 0보다 크다'라고 하는 것은 거짓이죠? 그리고 '날씨가 맑다'라는 것도 상황에 따라 참/거짓으로 판단할 수 있는 것이죠? 이렇게 명백하게 참과 거짓으로 판단할 수 있는 조건을 조건부라고 말합니다. 


하지만 '지금 몇 시야?', '오늘 날씨는 어때?' 등은 참과 거짓을 판단할 수 없기 때문에 조건부가 될 수 없습니다.


2. 코드 파트 (실행부)


실행부는 조건부가 참일 때만 실행되는 코드 파트(명령어들)를 뜻합니다. 조건부가 참이면 코드 파트는 실행되는 것이고, 조건부가 거짓이면 실행부의 코드 파트는 실행하지 않고 '점프' 하게 됩니다.


조건부와 실행부로 조건문을 만들어 보자면 아래와 같습니다.



어떤 프로그래밍 언어로 조건문을 작성하실 때, 딱 2개만 기억하시면 됩니다.


1. 내가 실행시키고 싶은 코드는 뭐지? (실행부)

2. 내가 실행시키고 싶은 코드가 실행되는 특정 조건은 언제지? (조건부)


다음 상황을 예제로 함께 조건문을 완성해볼까요?


코코넛봇은 오늘 대청소를 하려고 합니다. 대청소는 가장 먼저 창문을 열고, 침대 시트를 벗기고, 침대 시트를 세탁기에 넣고 돌린 다음, 빗자루질을 하고, 걸레질을 하고, 빨래를 널고, 창문을 닫는 순서로 합니다. 단, 날씨가 맑을 때만 청소를 합니다. 


정답

조건부 : 
날씨가 맑다
실행부 : 
1. 창문을 연다
2. 침대 시트를 벗긴다
3. 침대 시트를 세탁기에 넣고 돌린다
4. 빗자루질을 한다
5. 걸레질을 한다
6. 세탁기에서 침대 시트를 꺼내서 빨래를 넌다
7. 창문을 닫는다


위와 같이 조건부와 실행부를 나눌 수 있겠죠? 어렵지 않은 개념이죠?



조건문의 구성 2. '그렇지 않으면' 조건부


지금까지는 어떤 조건이 참일 때만 실행되는 조건문을 만들었는데, 조건이 참이 아닐 때도 어떤 행동을 하고 싶지 않을까요? 예를 들어, 날씨가 맑으면 대청소를 하는데, 날씨가 맑지 않으면 대청소는 하지 않고, 책꽂이 정리를 할 수 있지 않을까요?


이 경우에는 실행부를 두 파트로 구성할 수 있겠죠?


조건부 : 날씨가 맑다
실행부 1 : 대청소를 한다
그렇지 않으면 조건부 : 날씨가 맑지 않다
실행부 2 : 책꽂이 정리를 한다





조건문의 구성 3. 조건문 체인(= 조건문 기차)


꼭 조건이 참과 거짓 두 가지로만 나뉠까요? 


날씨가 맑다, 맑지 않다 두 가지로 나눌 수도 있지만 더 다양한 날씨 상황을 고려해서 어떤 행동을 할 수 있지 않을까요? 예를 들어, 날씨가 맑으면 대청소를 하는데, 날씨가 흐리면 책꽂이 정리를 하고, 비가 오면 부침개를 부쳐먹고 싶지 않을까요? 그리고 이 세 가지 조건에 만족하지 않는 날씨이면 아무것도 하지 않을 수 있겠죠?


이렇게 다양한 조건에 대해서 조건문 체인을 만들 수 있습니다. 왜 체인이라고 부르나면, 조건부가 줄줄이 이어져있기 때문입니다. 이해를 쉽게 하기 위해서 조건문 기차라고 보셔도 돼요 :) 


조건부 1 : 날씨가 맑다

실행부 1 : 대청소를 한다
조건부 2 : 날씨가 흐리다

실행부 2 : 책꽂이 정리를 한다
조건부 3 : 비가 온다

실행부 3 : 부침개를 부쳐먹는다
그렇지 않으면 조건부 : 조건부 1,2,3을 모두 만족하지 않으면

실행부 4 : 아무것도 하지 않는다


이렇게 여러 개의 조건이 있는 경우 주의할 점은 조건부 1이 참이어서 실행부 1을 실행시키면 다음 조건부는 보지 않는다는 것입니다! 만약에 조건부 1을 만족하지 않는 경우에 조건부 2가 참인지 거짓인지 판단을 할 때는, 명시하지 않아도 조건부 1을 만족하지 않는다라는 전제가 깔려있는 것입니다.


기차에 비유를 해보자면, 기차에 탄 범인을 찾기 위해 경찰들이 조건부 기차에 탑승했습니다. 만약에 1번 칸에서 범인을 찾으면 경찰은 범인을 붙잡고 기차에서 내립니다. 2번부터 4번 칸은 볼 필요가 없는 거죠.


경찰이 1번칸에서 범인을 잡았습니다
경찰은 조건문 기차의 2번~4번칸은 보지 않고 범인과 함께 바로 기차에서 내립니다


하지만 1번 칸에 범인이 없는 경우, 2번 칸으로 간 다음 2번 칸에서 범인을 찾습니다. 


경찰은 1번칸에 범인이 없다는 것을 확인했습니다


그런데 이때, 1번 칸에 범인이 있는지 다시 확인하지 않는다는 것입니다! 왜냐하면 이미 없는 걸 확인했기 때문이죠. 2번 칸에서 범인을 찾으면 범인을 붙잡고 기차에서 내립니다. 여기서도 역시 3번, 4번 칸은 볼 필요가 없습니다. 

경찰은 2번칸에서 범인을 잡았습니다. 이 때 1번칸은 이미 확인했기 때문에 다시 확인하지 않습니다
경찰은 2번칸에서 범인과 함께 기차에서 내립니다. 이 때, 3번, 4번칸은 확인하지 않습니다. 



요약


이렇게 해서 우리는 조건문의 개념과 구성에 대해서 자세히 알아봤습니다. 세 가지로 요약하자면, 


1. 조건문은 '특정 조건에서만 실행되는 코드 부분'을 의미합니다


2. 조건문 구성은 참과 거짓을 판단할 수 있는 조건부와, 조건이 참일 때만 실행되는 실행부, 이 두 가지로 이뤄져 있습니다.


3. 조건이 여러 개일 경우 조건문 체인 (또는 조건문 기차)으로 만들 수 있습니다.


조건문 체인은 조건문 기차로 생각하는 게 이해가 잘 되실 거예요 :) 그러면 다음 글에서는 이렇게 배운 조건문이 실제로 C 언어에서는 어떻게 표현이 되고 있는지 실습을 통해 알아보도록 할게요!



매거진의 이전글 [실습] 변수와 연산자
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari