컴퓨테이셔널 프로세스와 프로그래밍 언어
Shared on October 12, 2026
있는 정보들이 있겠죠. 여기서는 우리가 6%의 소금물 정보를 가지고 있고 그 다음에 9%의 소금물이 200g을 가지고 있다. 뭐 이런 정보들이 우리가 입력을 가지고 있을 겁니다. 그리고 나서 우리는 이걸 가지고 어떠한 결과물을 만들 건데 그 결과 우리가 원하는 아웃풋 출력 결과물은 이 8%의 소금물을 만들고 싶고 그러면 그 8%의 소금물을 만들기 위해서 우리는 6%의 소금물을 얼마나 가지고 있어야 되는지 이 정보들을 우리가 구하고 싶습니다.
그렇다면은 우리가 이제 여기서 기계적으로 고등학교, 중학교 때 기계적으로 딱 나오죠. 소금물의 양은 소금물의 농도는 소금물의 양분에 소금물 곱하기 100 이런식으로 계산을 하겠죠. 그 과정이 이제 알고리즘이 됩니다. 기본적으로 이 알고리즘은 고정이 되어 있고, 수식을 우리가 뭔가 이 빈칸에 우리가 알고 있는 정보들을 딱딱딱 넣어서
계산을 딱 수행을 하면 우리가 원하는 아웃풋을 구할 수 있죠. 그래서 이러한 전체적인 과정, 우리가 어떤 입력을 받고 그 입력을 어떤 알고리즘에 넣어서 계산을 하고 그 계산을 통해서 뭔가 출력, 아웃풋을 가지는 과정 이 전체적인 과정을 우리가 컴퓨테이셔널 프로세스라고 합니다. 그래서 방금 말씀드렸던 것처럼 우리가 여기 보시면 제가 컴퓨테이셔널 프로세스라고 적어놓게 했는데 뭔가 그냥 알고리즘 정도로 보시면 될 것 같습니다.
그래서 입력이 있고 그 입력을 어떤 알고리즘에 넣고 그러면 그 알고리즘에 넣으면 입력에 맞춰서 어떤 영상이 막 수행이 될 거고 그 계산에 맞춰서 어떤 출력을 갖는 이 일련의 과정을 우리는 컴퓨테이셔널 프로세스 라고 합니다. 그래서 이 내용을 정리를 하면은 맨 처음에 우리가 문제가 있었죠. 그러면 그 문제는 이제 인력과
아웃풋에 있습니다. 그래서 우리가 가지고 있는 정보 여기서 좀 하는게 좋을 것 같습니다.
그래서 처음에 소금물 문제라는 어떤 문제가 있었죠. 그 문제 안에는 입력과 아웃풋이 있습니다. 입력은 우리가 가지고 있는 정보들, 우리가 가지고 있는 내용이 있을 거고 그 다음에 아웃풋은 그 입력을 가지고 우리가 뭔가 만들어내고 싶은, 우리가 새롭게 얻고 싶은 것이 쌍으로 존재합니다. 그러면 입력으로부터 아웃풋을 만드는 이 일련의 과정들을 우리는 알 수 있습니다.
알고리즘이라고 정의를 하고 그 알고리즘이라는 것은 잘 정의된 Well-Defined Instruction. 그래서 잘 정의된 어떤 지시문. 소금물의 양을 x에 넣고 그 다음에 소금의 양을 y로 넣은 다음에 x분의 y 곱하기 100을 하면 우리가 가지고 있는 입력, 소금물의 양, 소금물의 농도가 나올 거고 이러한 알고리즘을 사용을 해서 우리가 문제를 푸게 됩니다.
So the computational process is the ability to make the input of the algorithm and to make the output of the algorithm and to make the output of the output. So you will have to decide the problem with the first time you have to decide the problem.
뭐를 X로 놓고, 뭐를 Y로 놓은 다음에 X에다가 뭐를 더하고 이런 식으로 우리가 직접 노트에 손으로 글씨를 쓰면서 그 문제를 해결을 했죠. 그런데 이제 우리는 이거를 컴퓨터로 직접 해결해 보는 거를 저희가 이 강의에서 배울 예정입니다. 그래서 우리가 어떤 프로그래밍을 만들고 싶은데 우리가 어떤 뭔가 프로그램을 만들고 싶어. 그러면은 우리가 어떠한 데이터를 가지고 있는지 파악을 하고
그러면 그 데이터를 어떤 알고리즘에 어떻게 넣을 것이고 그 다음에 그 알고리즘에서 어떠한 계산을 시켜서 그 출력을 만들 것인지 그 내용을 저희가 이 강의, 이 컴퓨팅 사고와 인공지능에서 배우는 내용이 되겠습니다. 그래서 여러분들은 이제 컴퓨터랑 우리가 앞서 봤던 뭔가 문제랑 이런 알고리즘들을 컴퓨터로 우리가 표현을 해야 되는데 그러면 컴퓨터는 어떻게 스윙을 해야 되느냐, 컴퓨터는 어떻게 우리가 프로그램을 만들어야 되느냐 이분적으로 프로그래밍 랭기지라고 해서 프로그래밍 언어가 있습니다.
간단하게 예를 들어보죠. 우리가 어떤 강아지랑 소통을 한다고 가정을 해봅시다. 물론 강아지도 사람말을 알아듣기는 하지만 좀 예시가 적절치 않은데 어쨌든 어떤 동물과 소통을 한다고 가정을 했을 때 우리가 인간의 언어로 동물에게 명령을 하면 당연히 이 동물들은 잘 이해하지 못하겠죠. 대신에 우리가 동물이 이해할 수 있는 언어를 사용하게 된다면 강아지나 다른 동물들도 그것에 따라서 이해를 하고 반응을 할 겁니다.
이러한 관점에서 보면은 우리도 어쨌든 컴퓨터에게 어떠한 문제를 줄 거고 그 문제를 어떻게 풀 것인지를 컴퓨터한테 알려줘야 되는데 그거를 우리가 말로 표현할 수 없는 거죠. 그래서 이 컴퓨터와 소통하기 위해서 컴퓨터가 이해할 수 있도록 사용을 하는 게 소통을 할 수 있도록 하는 것이 프로그래밍 언어다, 프로그래밍 랭기지다.
라고 보시면 됩니다. 그래서 프로그래밍 랭귀지라는 것은 우리가 컴퓨터와 소통을 할 때, 컴퓨터에다가 어떤 명령을 데리고 어떤 알고리즘을 수행을 시킬 때 사용하는 언어, 우리로 치면 어떻게 보면 한글, 한글 정도로 보시면 될 것 같습니다. 그래서 컴퓨터가 이해할 수 있는 언어가 이제 프로그래밍 랭귀지가 될 거고요. 그러면 프로그래밍이 있습니다.
프로그래밍은 무엇이냐. 프로그래밍이라는 것은 프로그래밍 언어로 쓰여진 어떠한 문장들이라고 보시면 될 것 같습니다. 우리가 한글을 안다고 해서 우리가 그걸로 뭔가 문장을 쓰거나 어떤 글을 쓸 수는 없죠. 그래서 이렇게 한글을 가지고서 어떤 문장을 만들어내는 과정. 그거를 우리가 프로그래밍이라고 보시면 될 것 같습니다. 그래서 프로그래밍이라는 것은 프로그래밍 언어를 사용을 해서 뭔가 컴퓨터에게 수행할 수 있는 명령을 내리는 것을 우리가 이제 프로그래밍이다 라고 할 수 있습니다. 그래서 우리가 하고 싶은 것 예를 들어서 화면에 헬로우 월드라고 출력을 시키고 싶다. 감사합니다.
라고 하면은 우리가 원하는 것은 프린트하고 싶다. 헬로월드라는 것을 스크린에 출력을 하고 싶다. 그러면 이것을 우리는 프로그래밍 언어로 프로그래밍을 짭니다. 그래서 그 프로그래밍을 짜면은 프로그래밍을 하면은 다음과 같은 어떤 프로그램이 나오죠. 그래서 이걸 만드는 과정을 하면은 이런 식으로 짜게 될 거고 이거 나중에 여러분들이 쉽게 할 수 있을 겁니다. 그래서 이러한 과정을 통해서
어떤 결과물로 만들어내는게 프로그래밍이라고 보시면 될거구요. 그러면 우리가 이러한 프로그래밍을 하게 되면은 그 결과물로써 어떤 프로그래밍이 나옵니다. 그래서 예를 들면은 우리가 앞에서 출력하는 것도 당연히 프로그래밍이라고 할 수 있고 간단하게는 현재 환율과 내가 원하는 금액을 넣으면은 그거를 달러로 변환해주는
그러한 프로그램도 간단하게 만들 수 있겠죠. 그래서 어쨌든 프로그램이라는 것은 이러한 프로그래밍 맹기지를 사용을 해서 프로그래밍을 하고 그 프로그래밍의 결과로 나와진 어떠한 실체 그런 것들을 우리가 프로그램이다 라고 합니다. 어렵지 않죠. 사실은 기본적으로 그냥 정확한 정의는 몰랐을지는 저도 실제 생활을 하면서 많이 들었을 겁니다. 그리고 아까 제가
드릴 말씀 중에 하나 깜빡했던 내용이 이 강의가 한글 강의인데 지금 자료를 보면 영어로 만들어져 있는 것을 볼 수 있습니다. 그래서 제가 영어로 만든 이유는 결국에 여러분들이 나중에 직장을 가거나 어쨌든 어떤 전공을 한다고 했을 때 실제로 한글로 배웠으면 통이 안 되는 부분이 상당히 많습니다. 대표적으로 조금 이따 나오겠지만 조합과 추상화 이런 식으로 개념이 나오는데 그것들을 한글로 표현을 하면 오히려 실제 일을 할 때도 잘 소통이 안 되는 경우도 있고
그러다 보니까 어떤 단어나 의미론적인 내용 같은 경우에는 영어로 학습을 하는 게 더 효과적입니다. 그래서 기본적으로 저희 교과목은 영어로 되어 있고 종종 한글로 되어 있는 내용이 슬라이드도 제가 제공을 해드릴 겁니다. 그런데 그 슬라이드 같은 경우에는 제가 생각했을 때 영어로 하는 것도 괜찮긴 한데 조금 중요한 부분이다 보니까 학생들이 조금 더 자세히 이해할 수 있도록 하기 위해서
임시적으로 영어로 한글로 제시되는 거니까 그렇게 걱정하지는 않으셔도 될 것 같습니다. 그래서 중간중간에 기본적으로 저희 교과목의 어떤 강의 자료들은 영어다. 근데 조금 복잡하고 학생들이 어려워하는데 중요한 부분에 대해서는 저희가 한글로 슬라이드를 제공을 해드린다. 이렇게 생각을 해주시면 될 것 같습니다.
여기까지 설명을 드렸습니다. 그러면은 결국에 우리가 어떤 프로그램을 만들려고 하죠. 뭐 인공지능 프로그램도 그렇습니다. 뭐 채치pt도 그렇고 클로드코드도 그렇고 다 결국에는 어떤 하나의 프로그램인데 그 프로그램을 만들기 위해서 가장 중요한 거는 어쨌든 프로그래밍 언어입니다. 그래서 프로그래밍 우리가 언어가 있어야 기본적으로 소통을 할 수 있겠죠. 그래서 이 언어 프로그래밍 언어는 매우 중요한데
그러면은 실제로 다음 시간에 배우겠지만 프로그래밍 언어에는 엄청 많은 언어들이 있습니다. 우리가 이 수업에서 배우는 파이썬도 있을 거고 그 다음에 C라는 언어도 있을 거고 자바라는 언어도 있을 건데 그러한 다양한 언어들 중에 다 장단점이 있습니다. 근데 대표적으로 프로그래밍 언어가 가지는
우리가 어떤 프로그래밍 언어가 좋다, 이 프로그래밍 언어는 강력하다 라고 했을 때 이 세 가지 조건을 충족을 해야 됩니다. 먼저 원시 데이터와 원시 함수를 제공해 줘야 된다. 이건 뒤에서 설명을 드릴 겁니다. 원시 함수가 무엇이고 원시 데이터가 무엇인지 뒤에서 설명을 드릴 거고 그 다음 두 번째는 우리가 프로그래밍을 만들었으면 그 프로그램을 자유자재로 우리가 조금
줄일 수도 있고 아니면은 어떤 뭐 쉽게 수정이 가능해야 된다. 그리고 마지막으로 우리가 콤비네이션과 엡스트랙션 조합과 추상화라고 하는데 이러한 메커니즘을 서포트 해줘야 된다라는 것이 이제 강력한 프로그래밍 언어의 조건이다. 그래서 지금은 이게 어떤 말인지 잘 이해가 안 되실 수도 있어요. 그래서 뒤에서 다음 슬라이드부터 하나씩 어떤 내용인지를 간단하게 설명해 드리도록 하겠습니다.
바로 원시 데이터와 원시 함수에 대해서 설명을 드리겠습니다. 말은 거창하게 원시 데이터, 원시 함수라고 했지만 그냥 데이터와 함수입니다. 그리고 데이터는 사실 컴퓨터는 데이터랑 데이터를 가지고 어떤 함수를 수행하는 겁니다. 그래서 실제로 우리가 컴퓨터를 사용하면 다양한 기능들이 있죠.
예를 들면 우리가 엑셀을 표해서 엑셀에서 어떤 학점이 쭉 나열되어 있을 때 그 학점을 오른차순으로 정렬하는 그런 기능도 있고 그 다음에 우리가 전체 학생명령 리스트에서 우리가 어떤 학생의 이름을 검색을 해서 찾는 그러한 펑션, 그러한 함수들이 다양하게 있는데 그런 것들은 어떻게 보면 기본적으로 펑션이라고 하는 기본적인
function이라고 하는 어떤 기능적인 기능을 말합니다. 그래서 정렬하는 기능, 아니면 데이터를 찾아주는 기능, 그러한 다양한 기능들이 있는데 그 중에 원시 function이라고 하면 실질적으로 우리가 알고 있는 사칙 형상, 이러한 것들을 우리는 원시 함수, 그러니까 preminative function이라고 정리를 합니다.
제가 좀 헷갈리게 설명을 드렸는데 우리가 사용하고 있는 다양한 어떤 기능들이 있을 건데 그것들의 가장 기적, 가장 밑에 있는 함수들을 우리가 Preliminative Function이라고 하고 그 Preliminative Function을 대표적으로 우리가 알고 있는 하치계산 겉쎔, 뺄쎔, 곧쎔, 그 다음에 비교, 부등호, 등호 이런 것들이 다
원시 함수가 됩니다. 그 다음에 또 원시 데이터. 데이터도 우리가 사실 많이 다루고 있죠. 예를 들면 여러분들 같은 경우에는 학교 데이터 시스템에 들어가면 여러분들의 학점 정보, 학번, 어떤 전국인지 그런 정보들이 다 있을 거고 인터넷에는 사진 데이터도 많을 거고 유튜브에는 동영상 데이터들. 그러한 데이터들을 그런 것들이 다
데이터라고 할 수 있는데 그렇다면 원시 데이터는 무엇인가. 결국에는 아까 함수에서도 다양한 함수들이 있지만 그것을 이루는 가장 기본적인 함수들을 우리가 원시 함수라고 했던 것처럼 데이터도 마찬가지로 다양한 데이터를 이루는 가장 기본적인 데이터를 우리가 원시 데이터라고 합니다. 그러면 원시 데이터는 무엇이 있을까요? 단순하게 생각을 하면 숫자 1,2,3,4,5 이런 것들이 원시 데이터가 될 수도 있고
기본적인 글자, 알파벳, A, B, C 이런 것들도 원시 데이터가 될 수 있을 겁니다. 이런 식으로 가장 기초적인 원시 데이터가 있다고 가정을 하고 이런 것들이 서포트 되어야 우리가 이 프로그래밍 언어가 좀 강력한 프로그래밍 언어라고 할 수 있다는 내용입니다.
여러분들이 생각을 했을 때는 당연히 엄청 좋은 기능들이 많이 있는 프로그래밍 언어가 좋을 것 같다라고 생각을 하는데 그것보다 중요한 것은 여기서 말씀드렸던 우리가 원시 데이터랑 원시 함수를 다룰 수 있어야 된다. 예를 들어서 이런 원시 함수를 못 다루는데 우리가 어떤 정렬 기능, 오른 차선으로 정렬하는 기능만 제공을 한다고 하면
우리가 어떤 특정한 기능을 추가하거나 변경을 하고 싶을 때 이런 원시 함수가 제공이 되지 않으면 그것들을 우리가 변경을 할 수 없겠죠. 그 기능만 사용을 해야 될 겁니다. 그러다 보니까 이러한 원시 데이터, 원시 함수를 다룰 수 있도록 해주는 것이 매우 중요하다는 것을 말씀드리고요. 그래서 앞에서 말씀드렸던 것을 예시로 가져온 그림입니다. 그래서 원시 데이터와 원시 함수
말씀드렸던 것처럼 원시 데이터는 숫자 2, 숫자 5 이러한 것들을 우리가 기본적인 원시 데이터라고 하고요 그 다음에 원시 함수 같은 경우에는 더하기, 빼기, 나누기, 곱하기 등이 있을 거고 나중에 가면 프린트 하는 것도 사실은 원시 함수로 되어 있습니다 어쨌든 기본적으로 여러분들은 사치 경상 수준의 어떤
기능들을 원시 함수다 라고 보시면 될 것 같습니다. 그래서 좀 복잡하지만 개념적으로 우리가 이것을 생각을 해보면 우리가 원시 데이터를 숫자로 놓고 그거를 우리가 2차원 공간의 어떤 평면상의 데이터로 표현을 할 수 있을 겁니다. 그 다음에 이러한 좌표 평면에서
우리가 어떤 위치로 이동하는 기능들을 제공할 수 있을 거고 그 기능에는 움직인다, mover한다 라는 것이 있을 수 있고 그 다음에 turn left, 왼쪽으로 돌아다 라는 기능을 제공할 수 있을 겁니다. 그래서 이거를 조금 더 자세하게 뭔가 그림으로 설명을 드리면 뭔가 이런 미로가 있다고 가정을 해봅시다.
이러한 어떤 미로가 있을 거고 여러분들도 아마 중학교 때쯤이었을 것 같아요. 여기서 여기까지 어떻게 가는 방법들을 세봐나 여기서부터 여기까지 가는 경우에서는 몇 개인가 이런 문제들 많이 풀어보셨었죠. 그런 거랑 비슷하다고 보시면 될 것 같아요. 그래서 우리가 현재 여기가 0,0이라는 위치에 우리가 서 있다고 가정을 해보고
그 다음에 우리가 1,0 방향을 보고 있다. 그래서 이쪽으로 보고 있다. 만약에 이게 0,1이라고 하면 0,1 이쪽 방향을 보겠죠. 그 다음에 마이너스 1,0 이런 식으로 하면 왼쪽을 바라보겠죠. 이게 어디서 보느냐에 따라서 다르는데 어쨌든 마이너스 1,0 방향을 본다고 하면은 이쪽
삼각형에 보이는 화산표가 어느 방향을 나타내는지가 이 direction이 될 거고 현재 좌표의 위치가 coordinate, 현재 좌표를 가지고 있을 수 있습니다. 예를 들어서 우리가 이 위치에 존재하면은 2,1, 이 좌표 정보가 2,1이라는 데이터로 사용이 되겠죠. 그런 다음에 우리가 현재 이러한 것들이 앞서 설명드렸던 것처럼 좌표랑 방향 정보가 있을 거고 그런 다음에 앞서서 저희가 기능을 가질 수 있다고 했죠.
그 기능은 이제 move, 움직인다. 그러면 그 방향으로 한 칼 이동해라 라는 기능을 넣을 수 있을 거고 turn left, 왼쪽으로 돌아가라는 기능을 넣을 수 있을 겁니다. 그래서 우리가 지금 현재 있는 위치에서 이 노란점까지 이동을 하려면 다음과 같은 명령을 차례차례로 실행을 하면 됩니다. 왼쪽으로 오른 다음에 움직이고 움직여라.
이런 식으로 우리가 프로그래밍을 짤 수가 있겠죠. 그러면은 이제 어떻게 되느냐. 첫 번째 이 move 데이터를 실행을 합니다. 그러면은 여기 있던 게 한 칸 이렇게 움직이겠죠. 그 다음에 또 move를 합니다. move를 하면은 또 한 칸 이동을 할 거고 또 move라는 함수를 실행시킵니다. 그럼 움직일 거고 또 움직이고 그런 다음에 여기서 우리가 왼쪽으로 돌아가라는 함수를 실행시켜서 왼쪽으로 방향을 바꿀 겁니다.
그러면은 아까는 여기가 1, 0이었는데 왼쪽으로 돌면서 0, 1이 됐죠. 그러면은 다시 여기서 왼쪽으로 돌았으니까 움직이고 움직이면은 우리가 원하는 이 목적지에 올 겁니다. 그래서 이렇게 원시 데이터랑 원시 함수 제가 앞서서는 원시 함수라는 게 가장 기본적인 기능이고 원시 데이터는 가장 작은 단위의 데이터라고 설명을 드렸었는데
여기에서는 우리가 1c 데이터랑 1c 함수를 좌표로 정의를 했고 그 다음에 1c 함수도 여기서 1c 함수는 move라는 것과 term rest라는 걸로 정의를 했습니다. 그래서 이렇게 간단하게 1c 데이터와 1c 함수만 사용을 하더라도 충분히 어떤 프로그램을 짤 수 있다는 것을 보여드리는 그런 예시였고요. 그 다음에 이제 뭐
앞서서 이런 프로그램을 짰을 때 이 프로그램을 조금 더 뭔가 간소화시킨다거나 아니면은 어떠한 조건을 붙여서 변경을 한다거나 뭐 이런 수정이 가능해야 된다라고 말씀을 드렸는데 앞에 저희가 짰던 어떤 프로그램이 다음 것 같습니다. 이렇게 move 움직여라 라는 것이 쭉 있고 그 다음에 왼쪽으로 돌아와 그 다음에 move 또 쭉 움직여라 이런 식으로 되어 있는데 우리가 이러한 뭐 프로그램의 어떤 순서를 바꾸거나 아니면은 뭔가
조작을, 그러니까 이 프로그램을 조금 쉽게 추정을 할 수 있느냐 우리가 원하는 방향으로 유지보수가 가능하냐 라는 측면입니다. 그래서 예를 들어서 이렇게 짤 수가 있겠죠. 우리가 어떤 이 좌표를 움직일 건데 이 빨간 점까지 이동을 시킬 거나 그 다음에 빨간 때까지 이동시키고 만약에 우리가 간 곳에
빨간 점이 있으면 그것을 보고 다시 원점으로 돌아와라 라는 식으로 우리가 프로그램을 짤 수 있겠죠. 그러면 아까랑 똑같습니다. 뭐 Move 데이터를 쭉 합니다. Move 해서 쭉 해서 여기까지 오겠죠. 왼쪽으로 돌아서 움직이고 움직이면 이제 빨간 것이 올 겁니다. 그러면 앞서서 제가 설명을 깜빡했는데 브랜칭이라고 해서
분기를 나눌 수 있습니다. 그래서 만약에 이 타겟 위치에 뭔가 빨간색이 있으면 왼쪽으로 돌아서 이렇게 갖고 그러면 여기까지 왔으면 다시 왼쪽으로 돌아서 움직이고 움직여 그래서 원점으로 다시 돌아와라. 근데 여기가 빨간색이 아니면 거기서 프로그램을 멈춰라 이렇게 되어 있습니다.
이런 식으로 되어 있고 만약에 저기에 노란 공이 있었다면 노란색까지 가서 이제 탈겟이 빨갛이 아니니까 프로그램이 멈추겠죠. 이런 식으로 짤 수 있고 또 여기 보시면은 같은 내용이 계속 반복되는 걸 볼 수 있어요. 그래서 움직여라 4개를 바꿀 수 있을 것 같고 뭔가 같은 명령을 하는 여기도 붙을 수 있을 것 같고 여기도 뭔가 붙을 수 있을 것 같아요. 그래서 이렇게 붙을 수 있는 기능도 제공을 합니다.
예를 들면은 이 move 데이터를 4번 반복해라. 그러면은 이 move 데이터가 4번 실행이 됩니다. 그러면은 뭐 이런 식으로 보고 4번 수행이 끝나면은 왼쪽으로 돌고 그 다음에 다시 2번 움직여라. 움직이는 걸 2번 반복해라 하면은 반복하고 그 다음에 이제 target이 red인지 아닌지 그럼 red니까 아래로 들어가서 다 실행을 하는 이런 식으로 우리가 짤 수 있을 겁니다. 여기서는 제가 그냥 이런 식으로 우리가 이해할 수 있는 그런 언어로
나중에 가면 이것들을 프로그램으로 어떻게 표현하는지 아마 다음 시간부터 천천히 배울 예정입니다. 그리고 마지막 조건이 이 조합과 앱스트리트 추상화를 지원해야 된다. 조합이란 무엇이고 추상화라는 것은 무엇일까? 사실 이걸 설명하기는 좀 애매합니다. 근데 굳이 정의에 따라서 설명을 드리면은
우리가 combination이라는 것은 조합이라고 하고 이 조합이라는 것은 우리가 어떤 간단한 것으로부터 우리가 간단한 것으로부터 어떤 복잡한 엘레멘트를 만든다. 그래서 레고를 예시로 들 수가 있겠죠. 이렇게 레고 블럭 하나하나는 되게 간단한 것인데 이것들을 조합을 하면은 우리가 이런 멋진 집을 만들 수 있는 것처럼 프로그래밍 언어도 앞서서 원시 함수, 그 다음에 원시 데이터
이 간단한 것들을 조합을 해서 하나의 어떤 복잡한 프로그램을 만듭니다. 실제로 여러분들이 나중에 가면은 모든 프로그램은 숫자로 처리를 하게 됩니다. 그런 만큼 그 모든 숫자 계산을 통해서 우리가 어떤 복잡한 것을 만들 수 있다. 간단한 요소로부터 우리가 복잡한 엘레멘트를 만들 수 있다는 것이 이 콤비네이션의 개념이고
그 다음에 abstraction이라는 것은 추상화 개념으로 추상화라고도 하는데 추상화라는 것은 우리가 어떠한 복잡한 집을 만들거나 복잡한 기능을 만들면 그것을 실제로 우리가 이름을 붙여서 활용을 할 수 있다는 것이 추상화 개념입니다. 그래서 이것은 조금 더 예시를 보여드리면 좋을 것 같은데 앞서서 우리가 여기에 있는데
앞서서 우리가 1c 데이터랑 1c 함수만 가지고 있다고 했죠. 그런데 1c 함수에는 turn left라는 것만 존재하게 됩니다. 그런데 우리는 여기서 노란 공 방향으로 가고 싶으면 우리가 왼쪽으로 돌아와, 그 다음에 움직여라. 이렇게 하면 오른쪽으로 가려집니다. 근데 사실 여기서 보시면은 여기서 한 번에
오른쪽으로 돌면 끝이 나는 거죠. 그런데 우리가 기본적으로 원시 함수를 제공을 했고 원시 함수는 왼쪽으로 도는 것만 제공을 합니다. 그러면 우리는 이거를 조합과 콤비네이션을 통해서 오른쪽으로 돌아라 라는 것을 만들 수 있습니다. 그래서 우리가 원시 함수 이 세 가지 왼쪽으로 세 번 돌아가, left를 세 번 해서 이것을 조합을 하면
우리가 이제 turn right라는 함수를 만들 수 있고, turn right라고 우리가 이름을 지을 수 있다. 그래서 이런 식으로 우리가 이름을 지을 수 있다는 것이 abstraction, 추상화라고 하고요. 그 다음에 이렇게 원시 함수, 원시 데이터들을 조합을 할 수 있다. 여러 가지를 이렇게 합쳐서 만들 수 있다는 게 combination이라는 것입니다. 그래서 우리가 앞에서는 이제 turn left를 세 번 쓴 다음에 boob를 했다면 여기서는 turn right라는 것을 만들어놓고 turn right하고 boob를 하면
바로 노란쪽으로 갈 수 있게 되는 것이죠. 그러면 우리가 이렇게 만들면 뭐가 장점이냐. 딱 봐도 우리는 직관적으로 알 수 있죠. 기존 프로그램을 보면 배쪽으로 3번 돌은 다음에 움직여라 라고 이해를 할 수 있는 반면 오른쪽을 보면 현재 위치에서 그냥 간단하게 오른쪽으로 돌아서 가라. 뭔가 조금 더 우리가 이런 추상화를 통해서 실제로 조금 더 이해하기 쉽고
이해하기 쉽게 만들 수 있다는 것이죠. 그래서 앞서 말씀드렸던 것처럼 우리가 프로그래밍 언어라는 것은 컴퓨터와 인간이 소통을 하는데 가장 필요한 것이고 그런데 이 프로그래밍 컴퓨터 같은 경우에는 실제로 원시 데이터랑 원시 함수밖에 인식을 못한다. 이러한 원시 데이터와 원시 함수를 잘 활용을 해서 우리가 어떤 프로그램을 만들어야 되는 거고
그런 프로그램을 할 수 있도록 만들어주는 게 프로그래밍 언어다