[2025 사무자동화산업기사 필기] 순서 제어

이기적 영진닷컴
21 팔로워
2024. 10. 21.
이 동영상은 [2025 이기적 사무자동화산업기사 필기 기본서)] 도서 내용을 바탕으로 제작되었습니다.
🔹 도서 자세히 보기 : http://www.yes24.com/Product/Goods/104404837
🔹 이 동영상이 포함된 재생목록 : https://youtube.com/playlist?list=PL6i7rGeEmTvr09yPV1T7G8GG1VxqqsMj7
🔹 모르는 문제? [이기적 스터디 카페] 질문하기 : https://cafe.naver.com/yjbooks
🔹 이기적 홈페이지 : https://license.youngjin.com
🔹 인스타그램 : https://www.instagram.com/license.youngjin_official/
이번 시간은 순서 제어에 관련한 부분을 학습하도록 하겠습니다.
우리가 프로그램을 짜나가면서 순서 같은 경우에는 구조화된 경우에는 절차적인 순서가 되겠지만
그 안에서도 반복문이라든지 조건문에 의해서 여러분들이 직접 순서 제어를 하셔야 되는 경우들이 있는데요.
그럴 때 방법들에 대해서 알아보고 그리고 제어문과 부프로그램에 대해서 학습해보도록 하겠습니다.
먼저 순서 제어라고 하면은 이 묵시적 순서 제어와 명시적 순서 제어로 나눠서 볼 수가 있는데요.
묵시적 순서 제어라고 하면은 프로그래머가 제어를 명시하지 않으면 해당 언어에서 정의한 순서에 따라서 제어한다고 되어 있죠.
그래서 예를 들어서 절차적으로 진행이 되는 중에 반복문을 만나면 그 반복문 안에서는 조건을 만족하는 동안에 계속해서 반복적으로 수행을 하다가
조건이 끝나면 다시 밖으로 빠져나가서 순서대로 진행을 한다든지 이러한 묵시적인 순서 제어가 있겠고요.
이 경우에는 일반 언어에서 순서를 명시적으로 제어하는 문장이 없을 경우에 문장의 나열 순서대로 제어한다라는 것이고요.
그리고 수식에서 과로가 없을 경우에는 연산자 우선순위에 의해서 수식이 계산된다라고 했죠.
그래서 연산자의 우선순위도 잘 알아두셔서 우선순위에 따라서 프로그램이 실행이 된다라는 것도 기억하시면 되겠습니다.
명시적 순서 제어 같은 경우에는 해당 언어에서 각 문장이나 연산의 순서를 프로그래머가 직접 변경하는 경우다 라고 할 수 있겠는데요.
고투문이나 또는 반복문 등을 사용해서 문장의 실행 순서를 변경하는 것을 말합니다.
이때에는 일반적으로는 고투문보다는 우리가 반복문 또는 제어문 등을 사용을 하는 경우들이 많겠는데요.
그 이외에는 수식의 과로를 사용을 해서 순서를 변경할 수 있다고 했죠.
그래서 수식에서 과로를 사용한다라고 하는 것은 여러분들이 수학적으로 계산을 할 때 보면 과로 안에 있는 것들을 가장 우선시해서 연산을 수행한다라는 것과
동일하게 생각을 해 주시면 되겠습니다. 수식에서의 순서 제어에 대해서 알아보도록 하겠습니다.
먼저 연산자라고 부르는 것에 대한 정의를 먼저 보도록 하죠.
연산자는 미리 정의된 것을 쓰거나 또는 사용자가 정의해서 사용한다라고 했는데요.
사용자가 정의해서 사용하는 연산 같은 경우에는 사용자 정의 함수라든지 그런 것들을 만들어서 사용을 할 수가 있겠죠.
이때 단항 연산자는 하나의 p 연산자를 갖는 것입니다.
그래서 낫 혹은 보습표현 같은 것들이죠.
낫이나 또는 보습표현 같은 경우에는 p 연산자가 하나만 필요하죠.
하지만 예를 들어서 a 더하기 b 다 했을 경우에는 p 연산자가 지금 두 개가 사용이 되는 것이죠.
이때에는 단항 연산이 아니고요. 하나만 필요한 경우에는 단항 연산으로 구분할 수 있겠습니다.
그리고 2항 연산자는 두 개의 p 연산자를 갖는 것이죠.
그래서 and 혹은 xor 또는 or 이런 것들이 2항 연산자에 해당하겠습니다.
이때 p 연산자라고 하면 상수 또는 변수 그리고 함수 호출 등이 모두 p 연산자에 사용이 되는데요.
우리가 알고 있는 상수와 변수 같은 숫자나 또는 문자데이드뿐만이 아니라
함수 호출도 역시 마찬가지 p 연산자에 해당이 된다는 것을 잘 기억을 해주시고요.
이때의 수식 구문의 표현입니다. 즉 신텍스라고 하면 연산자와 p 연산자의 위치에 따라서
전의 그리고 중의 그리고 후의 표기법으로 구분할 수 있겠습니다.
그래서 표기법의 문제인데 우리가 일반적으로 사용하고 있는 표기법 같은 경우에는
보시면은 중의 표기법이 가장 흔하게 사용이 되는 표기법입니다.
그래서 더하기다 그러면 a 더하기 b 이런 식으로 구분을 지어서 연산자를 p 연산자 사이에 표기하는 그런 방법이 되겠죠.
이런 중의 표기법은 일반적으로 가장 많이 사용이 되고요.
2항 연산에 적합한 표현이다 라고 했죠. 그래서 읽기가 가장 쉬운 연산 표현법이 되겠는데요.
자 이를 변형시켜서 전의 표기법으로 바꿀 수도 있겠습니다. 전의 표기법의 경우에는 연산자를 p 연산자의 앞에 표기한다.
그래서 연산자가 이렇게 앞에 들어가요. 그래서 항상 전의 표기법의 시작은 연산자로부터 시작을 하겠죠.
그래서 더하기 a 곱하기 bc 이렇게 되면은 a앞에 더하기 그리고 bc앞에 곱하기가 붙었기 때문에 b와 c를 곱해서 a에다가 더하라는
그러한 의미가 되겠죠. 자 이러한 전의 표기법의 특징은 p 연산자의 개수에 무관하게 모든 수식은 하나의 전의 표기법으로 표현이
가능하다 라고 했죠. 자 이것을 다시 후의 표기법으로도 바꿀 수가 있겠는데요.
후의 표기법은 말 그대로 연산자를 p 연산자의 뒤에다가 표기하는 방법입니다.
그래서 이렇게 앞에 p 연산자들이 들어가고요. 뒤에 이렇게 연산자들이 들어갑니다.
이것은 스택을 이용해서 수식의 값을 계산하는 데에 간편하게 쓰인다 라고 했는데요.
자 스택의 구조는 지난번에 여러분 한번 보신 것처럼 자 이렇게 메모리 구조가 있을 경우에 푸쉬, 값을 넣는 작업과 팝, 값을 빼내는 작업이
하나에서 이루어진다 라는 것이죠. 한 공간에서 이루어지기 때문에 어때요? 데이터를 넣은 순서대로 다시 빠져 나오는 것이 아니라 데이터를 넣어서
쌓이게 되면은 가장 마지막에 들어온 것이 가장 먼저 나간다. 그래서 데이터가 들어간 순서와 나온 순서는 반대가 되겠죠.
그래서 이것이 바로 스택이고요. 반대되는 구조가 q 였습니다. q 같은 경우에는 들어가는, 즉 푸쉬 하는 곳과 그리고 팝, 나가는 곳이 따로 따로 있기 때문에
가장 먼저 들어온 것이 가장 먼저 나가는 그런 구조가 되겠죠. 그래서 후위 표기법 같은 경우에는 스택을 이용할 때 가장 적합한 표기법이다 라고 볼 수가 있겠네요.
중위 표기법을 후위 표기법으로 바꾸는 방법입니다. 지금 보시면 이렇게 중위 표기법으로 우리가 일반적으로 알기 쉬운 그런 표기법이 되어 있죠.
그래서 보시면은 먼저 계산을 해야 되는 것에 여러분들이 체크를 해 두시면 됩니다. 연산자 우선 순위를 봤을 때에 더하기 빼기 연산보다 곱하기가 더 먼저 이루어져야 되겠죠.
그러면 이 중위 표기법을 우리가 계산할 때에는 b와 c를 먼저 곱하고, 그런 다음에 a를 더해서 최종적으로 d를 빼는 이 과정으로 진행이 될 겁니다.
그래서 먼저 계산할 연산자를 이렇게 표시를 해 두시고요. 그리고 연산자를 가장 가까운 가로 안에 맨 뒤로 이동한다 라고 되어 있는데요.
가장 먼저 계산할 값을 봤을 때에 b와 그리고 c를 서로 곱해야 되죠. 하지만 후위 표기법이기 때문에 곱하기가 이렇게 뒤에 들어가겠죠.
그리고 a를 더한다 라고 되어 있습니다. 그래서 a를 앞으로 두고, b와 c의 곱에 더하기 해서 계산을 하게 됩니다.
그러면 지금 여러분 보시면 b와 c를 먼저 곱하고, 그 다음에 a를 더하는 그런 형태가 되겠죠.
그러면은 앞부분에 있는 계산이 모두 끝났구요. 그리고 여기에서 d를 빼야 되죠. 원래 빼기 d 이렇게 써야 되는
중위 표기법을 후위 표기법으로 만약에 바꾼다면, d가 먼저 앞에 오게 되겠죠. b와 c를 곱하고, 거기에 a를 더해서
자 그런 다음에 어때요. d를 빼주세요 라는 이러한 결과가 되겠죠. 그래서
여기 마이너스가 하나 빠졌죠. 그래서 abc 곱하기 더하기 d 그리고 빼기 이렇게 됩니다. 그래서 여러분들이 이것을 보시고 중위 표기법으로 다시 바꾼다 라고 하면은
뒤에서 부터 보시면 되요. 빼기 d 해서 d를 가장 뒤에서 뺀다. 자 그런 다음에 bc 곱하기가 있으니까 b와 c를 곱해주세요.
그리고 a를 더해주세요 에서 a 더하기 이렇게 변경을 할 수가 있겠습니다.
그래서 여러분들이 전위, 중위, 후위 표기법을 각각 변환하는 방식도 간단하게 알아두시면 되겠습니다.
다음은 문장간의 순서 제어 방법입니다. 문장간에서 순서를 제어하는 방법 중에서 가장 간단한 것이 고투문이다 라고 하는 것을
지난 시간에 여러분 배우셨는데요. 고투문은 문장간의 실행 순서를 명시적으로 변경할 수 있는데 고투에서 원하는 위치로 이동을 할 뿐이죠.
그리고 순차 실행 같은 경우는 각 문장들을 순서대로 작성을 하되 프로그램 실행 시에 각 문장들이 하나씩 순차적으로 실행이 되는
그러한 기본적인 순차 실행 방법이 되겠구요. 자 선택 실행은요 두가지 수행 경로에 있는 문장 중에서 조건에 따라서 하나가 선택된다.
그래서 조건문에서 여러분들이 주로 사용을 하게 되겠구요. 자 그리고 반복 실행은 일련의 문장들이 조건에 따라서 수행되지 않거나 또는 만족할 때까지 계속해서 실행되는
그러한 방식이 되겠습니다. 자 이때 사용할 수 있는 것 중에서 먼저 고투문에 대한 특징을 먼저 보도록 하겠습니다.
고투문은 기본적으로 문장의 실행 순서를 임의로 원하는 대로 변경을 할 수 있는데요.
레이블이 붙여진 문장으로 제어가 이동된다. 즉 내가 고투문에서 지정한 곳으로 무조건 이동된다 라고 하는 무조건 분기문입니다.
그래서 블록 개념이 없는 저급의 제어 구조이다. 원하는 곳으로 바로 점프하도록 만드는 그러한 단순한 구조가 되겠구요.
자 이런 고투문의 장점이라고 하면은 간단한 프로그램이 경우에는 사용하기 쉽고 하지만 이론적으로 모든 제어 구조를 표현할 수 있다라는 것도 장점이 되겠죠.
자 간단하게 모든 제어 구조를 표현할 수 있다. 원하는 곳으로 어디든지 다 이동을 할 수 있다는게 장점이 되고 직접 하드웨어에 구현할 수 있어서 실행이 효율적이다 라는 것도 장점이 되겠는데요.
반면에 프로그램 작성이 비구조적이다. 즉 내가 원하는 순서대로 실행하도록 짜놓은 이 상태에서 고투문을 만나게 되면은 어디로 이동할지 모르는 거죠.
그렇기 때문에 비구조적이고 계층적이지 않게끔 프로그램을 변경을 해버린다는 것도 단점이 되겠구요.
자 그리고 많이 사용할 경우에 프로그램을 이해하기 어렵다. 그래서 고투문이 아래로만 내려가는 것이 아니라 여기에는 문장을 수행하고 끝에 또 고투문을 만나서 다시 위로 올라가는
이러한 작업들을 반복을 하다 보면은 프로그램을 이해하기 어렵고 따라서 디버깅 즉 수정이 어렵다 라는 문제점도 있겠죠.
그래서 프로그램의 전체적인 유지 보수가 어렵다 라는 것이 고투문의 단점이 되겠습니다.
자 반면에 구조화된 프로그래밍은요. 구조적인 프로그래밍은 순서, 선택, 반복의 3가지 논리구조를 사용하는 기법으로 하나의 입력과 출력을 갖는 구조입니다.
그리고 블록 구조를 갖는 모듈화 프로그램입니다. 그래서 각각의 블록들을 이렇게 실행을 하면서 진행이 되는, 그래서 하나의 입력이 들어와서 프로그램이 쭉 모듈별로 실행이 되고
제일 마지막에 어떤 아웃풋 결과 값을 내보내는 그러한 가장 일반적인 프로그램의 구성 방식이 되겠는데요.
이때에는 이 구조 프로그램의 특징은 먼저 가독성이 좋습니다. 실행하는 순서대로 보시면 되기 때문에 프로그램 가독성이 좋구요.
그렇기 때문에 프로그램의 개발과 유지 보수가 용이하다 라는 것도 장점이 되겠죠.
그리고 프로그램에 대한 신뢰성을 향상시킨다 라고 했는데요. 한눈에 다 구조를 볼 수가 있기 때문에 신뢰성이 향상이 되고
그리고 프로그램에 대한 규칙을 제공을 합니다. 그리고 노력과 시간이 감소하는 절차적이기 때문에 어떠한 구조를 짜거나 혹은 단위를 나누거나 이럴 필요가 없기 때문에
시간과 노력이 감소된다는 것도 장점이 되겠습니다. 자 이번에는 제어문의 종류가 어떤 것들이 있고 그리고 각 제어문들이
어떠한 형태들로 구성이 되는지를 살펴보도록 하겠습니다. 자 그 첫번째로 조건문을 볼텐데요. 조건문 중에서 우리가 가장
대표적으로 볼 수 있는 게 바로 if문이 되겠습니다. 단일 if문 같은 경우에는 단일 선택문이라고 할 수도 있겠구요.
자 조건은 불수식 즉 불린 즉 참과 거짓이 나오는 그러한 수식으로 조건을 쓸 수 있구요. 참 또는 거짓 중 하나를 값으로 해야 합니다.
조건식은 반드시 참인지 거짓인지를 가릴 수 있는 그런 문장이어야겠구요.
자 그리고 이때 if문은 조건이 참일 경우에는 문장 1 즉 참에 해당하는 문장을 수행을 하고 거짓일 경우에는 빠져나가서 다음에 있는 문장을 수행한다.
그래서 단일 if문의 가장 기본적인 형태는 이렇게 되겠죠. 그래서 간단하게 if 조건식 쓰고 맞을 경우에 수행한 문장을 씁니다.
만약에 틀렸을 경우에 이 다음에 있는 어떠한 문장들을 수행을 하는 그런 간단한 형태가 되겠죠.
그래서 조건문 중에서도 가장 기본이 되는 단일 if문이 되겠구요. 자 그 다음에 else if문. if문의 확장된 형태라고 볼 수 있겠고
다중 선택문이 되겠습니다. 물론 else 같은 경우에는 기본 if문에도 쓸 수가 있죠.
if 그리고 조건들을 쓰구요. 맞을 경우에 수행한 문장들을 쓴 다음에 else로 틀릴 경우에 수행할 문장을 또 따로 기록을 해 두실 수도 있겠습니다.
하지만 else if문 같은 경우에는 어때요? else if문 같은 경우에는 else 다음에 수행할 문장을 쓰는 것이 아니라
else 다음에 또다시 if문을 이렇게 붙여주는 형태가 되겠죠. 그래서 오른쪽에 있는 그 형식을 잠깐 보시면 if의 조건식이 먼저 들어갑니다.
그래서 맞는 경우에 수행할 문장을 써요. 자 그런 다음에 else 틀릴 경우에 수행을 하는 문장을 쓸 수도 있겠고 또는 else if로 또 조건식을 하나 더 써주고
그에 맞을 때 또 문장을 수행하도록 이렇게 나열을 해 주실 수도 있겠죠.
자 그래서 이런 else if문을 썼을 경우에는 조건이 여러개고 그리고 실행된 문장이 각 조건에 따라서 나뉘어져 있을 때에 사용을 하시면 되겠습니다.
또한 수식들이 순차적으로 평가하면서 그리고 어느 하나의 수식이 참이되면 그때 해당하는 명령문이 실행됩니다.
그래서 실행되고 나서는 이 if문 전체를 벗어나게 되는 그런 형태가 if와 else를 사용하는 그런 문장이 되겠습니다.
자 이 if문을 좀 더 다른 형태로 변형을 시켜 놓은 것이 바로 이 switch문이 되겠는데요.
자 switch문은 다중택일문 형식이다라고 했어요. 즉 아래 보시면은 스위치 뒤에 조건을 우선은 기록을 합니다.
조건을 나열을 해서 이 조건에서 나타나는 값이 case1일 경우 즉 이 값이 예를 들어서 숫자가 10이다라고 한다면 그때 어떤 문장을 수행하고 break 즉 빠져나옵니다.
break문은 여러분들이 앞에서도 한번 보셨는데 이 모든 구문을 빠져나올 때 스위치 안에 break문이 들어있다면 스위치문 전체를 벗어나고자 할 때 사용을 했죠.
자 그래서 break문으로 case1에 대한 것을 출력한 다음에 빠져나옵니다.
근데 아닐 경우에는요 빠져나오지 않고 다음으로 내려가서 case2를 또 보는 거죠.
그래서 맞다면 문장을 수행하고 역시 break에서 빠져나오는데 case2도 아니다 그러면 다시 아래로 내려가서 case3까지 갑니다.
이런 식으로 내가 원하는 케이스를 갯수에 상관없이 나열한 다음에 break를 만나서 빠져나오도록 하는데 케이스를 모두 다 만족하지 않을 경우도 있겠죠.
그럴 때에는 디폴트 문장 즉 모두 다 만족하지 않을 경우에 수행할 문장을 제일 아래에다 디폴트로 기록을 해둡니다.
자 이렇게 되면은 if-else를 만약에 여러분들이 쓴다면은 if-else의 단위가 여러 블록이 나와야 된다면 스위치를 쓴으로 인해서 좀 더 간단한 구조가 될 수도 있다는게 장점이죠.
그래서 이 스위치문 같은 경우에는 다중이프문 대신에 사용해서 다중이프의 문제점을 보완할 수 있다는 의미에서 많이 활용이 되겠습니다.
자 이번에는 반복문입니다. 반복문, 조건문 다음에 제어문에서 우리가 볼 수 있는 것이 반복문인데요.
자 먼저 y문 같은 경우에는요 조건식의 값이 참일 경우에 문장을 실행하고 문장을 쭉 실행하고 다시 올라와서 조건식을 또 검사합니다.
그래서 참이면 또 실행하고 거짓이다 그럴 때는 다시 문장을 빠져나오는 그러한 구조가 되겠는데요.
자 오른쪽에 보시면은 자 먼저 y문 뒤에 조건을 쓰죠. 그래서 조건이 맞다 그러면은 문장을 실행을 합니다.
이런 문장들을 쭉 실행한 다음에 끝이 나면 다시 y문으로 돌아가요. 자 또다시 조건식에서 비교를 합니다.
자 물론 이때는 변수라든지 이런 값의 변동이 있는 경우에 해당이 되겠죠. 그래서 y문을 또다시 봤을 때 이번에도 조건식이 맞다 그러면 또다시 문장을 또 수행을 합니다.
그리고 또다시 y문으로 돌아가서 다시 조건식을 봐서 이번에는 조건식에 맞지 않다 그러면 빠져나와서 그 아래에 있는 다른 구문들을 수행하는 그러한 형태가 되겠는데요.
뭐 예를 들어서 여러분들이 앞서서 배열이라는 것을 배우셨는데요. 이 배열에서 값이 있느냐 없느냐를 조건으로 거는 거죠.
그래서 예를 들어서 배열에 이렇게 값이 있어요. 그래서 여기서부터 읽어들어서 값이 있으면은 출력하세요 라는 문장을 예를 들어 기술을 했다.
자 그러면은 배열의 첫번째 칸을 봐서 어 값이 있구나 조건에 맞죠. 그러면 출력하는 뭔가를 수행을 합니다.
그리고 다시 올라가서 두번째를 봤을 때 또 값이 있죠. 그러면 또다시 출력하는 문장을 실행을 합니다.
다시 올라가서 세번째까지 출력을 하고 다시 올라갔는데 자 이번에 봤더니 값이 없다라는 거죠.
그러면 더 이상 수행을 할 수가 없기 때문에 y문 전체를 빠져나오고 다음에 있는 그런 문장들을 실행하는 그 순서대로 진행이 되겠습니다.
그래서 이러한 것들이 반복문 중에서 y문의 가장 대표적인 형태다 라고 볼 수가 있겠죠.
자 두번째로는 두 알문입니다. 두 알문은 y문이랑 거의 유사해요. 하지만 한가지 차이점이 있다면 문장을 일단 한번 실행하고 나서
자 그런 다음에 조건을 검사합니다. 즉 최소한 한번은 실행하게 된다라는 건데요. 구조는 y문이랑 유사하죠.
자 가장 먼저 두 즉 내가 처음에 실행해야 되는 문장들을 먼저 기술을 해서 한번 실행을 하고
자 그런 다음에 y문에서 조건식을 비교합니다. 그래서 맞을 경우에는 문장을 수행하고 아닐 경우는 빠져나온다 라는 의미에서
두 알문은 y문과 한번에 실행이 있느냐 없느냐 그 차이점이 있겠습니다.
자 그리고 또 많이 사용이 되는 반복문 중에서 4문을 들 수가 있겠는데요. 4같은 경우에는 기본적으로는 반복 변수를 이용한 반복문이다.
자 여기에서 얘기하는 반복 변수라고 하는 것은 이 조건 안에 들어가는 변수에 해당합니다. 그래서 예를 들어서 i가 i라는 값이
10보다 작을 때까지 수행하세요 라는 식으로 이 변수를 하나 이용을 해서 반복시킵니다. 그래서 10보다 작을 때까지 실행하고
한번 4문을 수행할 때마다 i를 하나씩 하나씩 증가하세요. 이런 식으로 주로 조건식에다가 집어 넣는 거죠.
자 그런 다음 초기식에는 이렇게 i가 언제까지 실행하세요가 들어가고 증감식에는 i를 하나씩 늘리세요가 들어가고 그리고 중간에 조건이 들어갑니다.
그래서 맞는 동안에 i가 10이 될 때까지 계속해서 반복을 하는데요. 4문은 일반적으로는 일정한 횟수만큼 반복적으로 수행시키고자 할 때
그런 경우에 사용을 하는 경우들이 많습니다. 4문에서의 초기식은 한번 수행된다고 했는데요. 초기식이 한번 수행이 되는 경우도 있고 또는 수행되지 않는 경우도 있겠죠.
경우마다 다르다고 볼 수가 있겠습니다. 자 그래서 우리가 조건문, 반복문, 제어문에 대해서 알아보셨구요.
자 이제 마지막으로 부프로그램에 대해서 보도록 하겠습니다. 부프로그램이라고 하면은 주프로그램과는 또는
주프로그램 또는 다른 부프로그램에 의해서 사용되는 독립된 단위 프로그램이다. 그래서 내가 프로그램을 쭉 실행하는 중에 또 다른 프로그램 하나를
독립적으로 실행해주는 그런 경우를 말합니다. 그래서 1년의 실행을 단순화하기 위해서 프로그래밍 언어에서 제공하는
메커니즘이다라고 했는데요. 자 이러한 부프로그램을 사용했을 때의 장점입니다. 먼저 프로그램의 크기가 작아져서 기업장 소유의 낭비를
방지한다. 즉 내가 프로그램을 이만큼 수행하는 동안에 어딘가에 있는 다른 프로그램을 호출해서 사용하는 거죠.
그래서 이만큼의 코드가 없어지기 때문에 전체적인 프로그램의 크기가 작아진다라고 볼 수 있겠구요.
자 그리고 한번 작성한 부프로그램은 공동으로 여러번 사용합니다. 그래서 여기에서도 사용이 가능하고 또 다른 프로그램이 있다면 다른 프로그램에서도 호출해서
사용이 가능하다라고 하는 거죠. 자 그렇기 때문에 프로그램의 이해와 유지 보수가 용이하다는 것도 마찬가지 장점이 되겠네요.
자 이러한 부프로그램을 선언할 때에 명시해야 하는 상황입니다. 첫번째로 부프로그램에 이름이 들어가야 되겠죠. 이름이 들어가서 그 이름으로 프로그램을 호출을 할 수가 있어야 된다라는 것이구요.
자 그리고 부프로그램의 인자의 수와 그리고 인자의 유형. 그래서 우리가 예를 들어서
내가 뭐 더하기를 하는 add라는 프로그램 하나를 만들었어요. 부프로그램으로. 자 그런데 나는 add를 할 때 인트값 하나를 받도록
이렇게 만들어놨어요. 그러면 여기에 이 인자, 값을 받아야 되는게 값에 대한 유형과 그리고 수가 있어야 되겠죠.
자 그리고 반환 되는 값의 수와 유형이다 라고 했는데요. 이렇게 add라는 함수를, add라는 부프로그램 호출을 해서 실행을
뭔가 이 안에서 실행을 해서 결과 값이 있을 거에요. 주로 리턴 값이라고 얘기하는데 리턴 값이 있는 경우에 이 리턴 값이 어떤 형태다.
예를 들어서 인트 형태다. 이런 식으로 반환이 되는 값의 유형 그리고 수가 있어야 되겠죠. 그리고 부프로그램을 수행하는 이런 기능들이 있어야 되겠습니다.
그래서 이러한 형태가 부프로그램의 기본적인 명시 사항이 되겠죠. 자 그리고 부프로그램을 실행 그리고 구현할 때 사용이 되는 몇 가지 요소들입니다.
자 먼저 우리가 코루틴 이라는 부프로그램 종류가 있는데 부프로그램의 수행이 완전히 종료되기 전에 호출할 수 있는
그런 부프로그램을 코루틴 이라고 하고요. 서브루틴 이라고 하는 것은 부프로그램의 수행이 완전히 종료된 후에 호출한 프로그램으로 제어를 반환하는
자 그리고 매크로 라고 하는 것은 앞서서도 몇 번 우리가 용어를 보셨는데요. 이 매크로는 기본적으로 자주 반복되는 명령을 하나의 블록으로 묶어서 이름을 부여하고
그리고 사용할 곳에 지정한 이름만 적어서 수행하는 방법이다 라고 했죠. 즉 반복적으로 수행이 되는 어떠한 작업이 있을 경우에 그 작업을
이렇게 묶어 놓습니다. 그래서 구성을 해놔요. 그리고 이름만 여기다가 불러서 사용을 하는 그러한 프로그램이다 라고 볼 수가 있겠는데요.
아래 매크로와 부프로그램의 차이점에 대해서 간략하게 보고 계시는데요. 자 첫 번째로 우리가 매크로다 라고 하면
먼저 컴파일 전에 매크로 프로세서에 의해서 확장이 일어난다. 그리고 실행이 빠르고 메모리 사용량이 많다 라고 했구요.
부프로그램의 경우에는 컴파일 후에 실행시에 콜 또는 리턴에 의해서 실행이 이루어진다 라고 했습니다. 그래서 실행이 상대적으로 느립니다.
왜냐하면 매크로 같은 경우에는 컴파일 되기 전에 이미 다 갖추어 놓은 상태에요. 그래서 실행 가능하도록 코드를 다 완성을 해 놓은
실행 코드를 완성을 해 놓은 상태고 부프로그램 같은 경우에는 컴파일 후에 호출이 일어납니다.
그렇기 때문에 아무래도 실행 시간이 좀 더 많이 걸린다는 단점이 있겠죠. 하지만 매크로는 그만큼 메모리 사용량이 많아질 수밖에 없죠.
부프로그램의 크기가 커지면서 사용량이 많아지지만 부프로그램은 메모리 사용량이 상대적으로 적어 질 수가 있겠습니다.
하지만 두 개의 프로그램 모두다 반복되는 작업을 독립시켜서 하나의 모듈로 작성해서 여러 번 다른 곳에서 불러서 사용하도록 했다 라는 점에서는
둘 다 모두 공통적인 그러한 측면이 있겠습니다.
이런 부프로그래밍에서 여러분들이 아셔야 되는 마지막 한 가지가 프로그래밍 언어의 유해한 요소가 되겠습니다.
프로그래밍 언어의 유해한 요소 이 부분은 시험에 몇 번 출제가 됐기 때문에 잘 기억을 해 두시고요.
자 먼저 부작용 같은 경우에는 전역변수를 액세스하거나 전역변수는 앞서 여러분들이 배우셨던 변수의 종류들에 있었죠.
전역변수를 액세스하거나 변경 또는 문장에 나타나지 않은 변수값을 변경시키는 이런 것을 부작용이라고 한다고 했습니다.
그래서 참조에 의한 전달 즉 콜바이 레퍼런스 그리고 이름에 의한 전달 즉 콜바이 네임에서 발생한다고 했는데요.
그렇기 때문에 콜바이 레퍼런스나 콜바이 네임은 객체장 언어에서는 사실은 사용하지 않는 그러한 개념이기도 합니다.
객체장에서는 콜바이 벨류라고 해서 값을 직접 불러들인다, 값을 전달한다라는 그런 의미를 많이 사용을 하고 있습니다.
전역변수의 단점을 보완하기 위해서 매개변수 전달 기법을 사용한다라는 것도 역시 부작용의 한 요소가 되겠습니다.
자 그리고 별명이라고 하는 것은요. 이것도 그냥 간단하게 여러분도 읽어 보시면 되겠습니다.
하나의 기억장소에 서로 다른 이름이 바인딩될 때 발생한다. 그래서 값은 하나예요. 값은 한군데 있는데 여기에 이름이 즉 변수명이 2개 이상 붙어있는 경우죠.
그래서 자료객체는 생존기간 중에 여러 별명을 가질 수가 있고, 자료객체가 여러 별명을 갖는 경우에는 프로그램의 무결점
검증이 어려워진다고 했습니다. 그래서 여러개의 이름을 가지고 있으면 그중에 어떤 이름을 쓰느냐에 따라서 프로그램이 달라지기 때문에
그런 면에서 문제가 발생할 수도 있겠구요. 자 그리고 같은 참조환경에서 다른 이름으로 같은 자료객체를 참조할 경우,
즉 이 데이터를 서로 다른 이름으로 참조할 경우에는 프로그램에, 프로그래머에게 심각한 어려움을 줄 수 있다라는 것도 문제점이 되겠죠.
그래서 두가지도 부프로그램에서 함께 알아두시기 바랍니다. 자 여기까지 해서 우리 순서 제어와 그리고 부프로그램들에 대해서 학습을 해보셨는데요.
자 여기에서는 여러분들이 그 제어문에 관련한 부분들, 반복문이나 조건문 같은 제어문에 관련한 부분들 잘 기억을 해두시고,
그리고 부프로그램 부분이 시험에 많이 출제가 되기 때문에 부프로그램 부분들을 잘 기억을 해두시기 바랍니다.
자 이번 시간은 여기까지 하고 마치겠습니다. 여러분 수고하셨습니다.
