콘트롤 구조 (CONTROL STRUCTURE) 란?
우리가 만드는 프로그램은 하나의 절차(procedure) 로서, 보통 그 내부에 2개 이상의 명령어를 포함한다. 절차 내에 포함되어 있는 2개 이상의 명령어들은 동시에 실행될 수 없다. 즉, 한번에 하나의 명령어만 실행될 수 있다. 다시 말해서, 어떤 명령어가 실행이 끝나야 다른 명령어가 실행 될 수 있다. 그렇다 보니 어떤 명령어가 어떤 명령어보다 먼저 실행되어야 하는지 명령어들의 실행 순서를 결정해 주어야 하는 문제가 생긴다.
이와 같이 명령어들 간의 실행순서를 컨트롤 구조라고 부르며, 컨트롤 구조에서는 순차(sequence), 분기(branch), 반복(repetition, loop) 등의 3가지 형태가 있다.
○ 가장 기본적인 형태는 시퀀스 (sequence) 이다
가장 기본적인 형태는 시퀀스이다. 시퀀스는 2개 이상의 명령어가 있을 때, 먼저 입력된 명령어가 먼저 실행되는 순차적 관계를 말한다. 아래의 코드를 보.
위의 파이썬 코드에는 모두 4개의 명령어가 포함되어 있다. 4개의 명령어가 모두 실행되어야 우리가 원하는 결과를 얻을 수 있다. 단, 이들 간에 실행의 순서가 있는데, 가장 먼저(즉, 위쪽에) 정의된 (가) 명령어가 첫번째로 실행이 된다. (가) 명령어가 실행이 시작되고, 실행이 ~ing 하다가 (가) 명령어가 성공적으로 실행이 끝나면 그 다음으로 (나) 명령어가 실행이 시작되고, (나) 명령어가 성공적으로 실행이 끝나면 그 다음번 명령어인 (다) 명령어가 실행된다. 이렇게 순차적으로 실행되어 마지막 (라) 명령어 까지 실행이 완료되면 "우리가 고대하던" 56이란 결과를 얻을 수 있다.
다시 말해서, 우리가 얻고자 하는 결과를 얻기 위해서 모든 명령어가 "정의된 순서에 따라", "반드시" 그리고 "한번만" 실행이 되는 형태를 시퀀스 (sequence)라고 부른다. 시퀀스가 가장 기본적인 형태가 되고 분기와 반복은 시퀀스의 규칙 (반드시, 한번만)을 조정함으로써 구현된다.
○ 분기 (branch)는 "반드시" 라는 규칙을 조정한다
프로그램에 포함되는 어떤 명령어(들) 중에는 항상 "반드시" 실행되는 것이 아니라, 특별한 조건이 만족될 때에만 실행되는 경우가 있다. 즉, 어떤 경우에는 실행이 되고, 반대의 경우에는 실행이 되지 않도록 통제 control 할 수 있다. 컴퓨터 언어에서는 이러한 구조를 분기 branch 라고 부르며 if 라는 키워드를 이용하여 구현할 수 있다. 일반적으로, if 로 만들어지는 문장이란 의미에서 그냥 "if 문" 이라고 부른다. #분기문에 대한 설명은 다음번에 포스팅되는 글을 참고하기 바란다.
○ 반복 (repetition)은 "한번만"이라는 규칙을 조정한다.
어떤 명령어(들)은 한번만 실행하는 것이 아니라 여러번 반복하여 실행할 필요가 있다. 컴퓨터 언어에서는 이를 반복 repetition 이라고 부르고 이러한 통제구조를 만드는 키워드 예약어는 for, while 이다. 그림의 형태에서 보다시피 반복의 경우에는 동그란 ring 형태가 발견되기 때문에 loop 라고 부르기도 한다. 보통, "for 문", "while 문" 이라고 부른다. #반복문에 대한 설명은 다음번에 포스팅되는 글을 참고하기 바란다.
콘트롤은 토큰(token)의 흐름이다
이러한 규칙을 토큰(token)이라는 수단을 활용해서 이해해 보자. 예전에는 버스를 탈 때 토큰(token)을 이용했었다. (*검색 사이트에서 "버스 토큰"이라고 한번 검색해 보기 바란다. 예전에는, 버스 요금에 해당하는 돈을 주고 버스 토큰을 하나 구매하고 (물론, 한꺼번에 여러개를 구매할 수 도 있지만...), 현금 대신에 토큰을 이용해서 버스를 탈 수 있었다. 토큰을 가지고 있다는 것은 버스를 탈 수 있는 권리가 있다는 것을 의미한다. 대신, 그 권리를 사용하면 (즉, 버스를 타면) 그 권리를 버스회사에 반납하게 된다.
어떤 프로그램이 실행될 때, 운영체제(OS, Operating System)*는 그 프로그램에 "실행될 권리"를 뜻하는 하나의 토큰을 부여하게 된다. 프로그램은 운영체제로 부터 부여 받은 토큰을, 프로그램 내에서 가장 먼저 선언된 명령어에게 준다. 이제 토큰을 받은 첫번째 명령어는 "실행될 권리"를 가지게 되고, 실행할 여건이 되면 실제 실행하게 된다. 첫번째 명령어가 성공적으로 실행이 완료하면 토큰은 다시 프로그램에 반납하게 된다. 첫번째 명령어로 부터 토큰을 반납받은 프로그램은 그 다음 명령어 (두번째 명령어)에게 토큰을 제공한다. 이제 두번째 명령어가 "실행될 권리"를 가지게 된다.
이런 형태를 가만히 보면, 마치 토큰이 움직이는 것 처럼 또는 상류에서 하류로 물이 흐르듯 정해진 순서에 맞추어 토큰이 흐르는 것처럼 (token flow) 느껴진다. 이를 control flow라고 부른다. 꼭 이미지화해서 머리속에 담아 둘 것을 추천한다.
* 운영체제 (Operating System) : 컴퓨터 하드웨어를 직접 통제하는 소프트웨어로서 대표적으로 윈도우즈 (Windows), 리눅스(Linux) 가 있다.
'파이썬 (python)' 카테고리의 다른 글
[python 10] 반복을 위한 for, while (0) | 2020.02.25 |
---|---|
[python 9] 분기를 위한 if, elif, else (1) | 2020.02.25 |
[python 7] 파이썬 내장함수 built-in function (0) | 2020.02.20 |
[python 6] 데이터와 연산 (0) | 2020.02.19 |
[python 5] 데이터와 변수 (0) | 2020.02.19 |