📖프로그래밍을 왜 할까?
인공지능, 게임, 네이게이션, 모바일 앱, 엔터테인먼트 등 여러가지 응용의 시작점에 오신 여러분들을 환영합니다.
강좌의 목적은 컴퓨터가 여러분들을 위해 특정 역할을 수행할 수 있도록, 컴퓨터에게 명령을 내리는 것입니다.
명령을 하기 위한 언어로 파이썬을 배우게 되실것이고 올바른 소통을 위한 문법들을 배우게 됩니다.
자 이제 준비 되셨으면 함께 시작해 보겠습니다.
학습 목표
- 사용자가 아닌, 프로그래머로서 컴퓨터를 바라보는 관점 변화의 필요성을 이해하고 설명할 수 있다.
들어가며
- 우리가 프로그래밍을 배우는 목적이 컴퓨터가 우리를 위해 일 하도록 만드는 것이라는 점.
- 컴퓨터는 우리가 시킨 일을 실행하도록 디자인됐고 만들어졌다.
- 기본적으로 컴퓨터는 다음에 할 작업이 무엇인지 우리에게 물어본다. 다음 해야할 일이 무엇인지 알려주지 않으면 가만히 기다리기만 한다. 우리 주변에 있는 모든 하드웨어와 컴퓨터들은 명령을 기다리고 있다.
- 우리가 컴퓨터에게 일을 시키는 것이 중요하다. 컴퓨터 자체는 전혀 똑똑하지 않기 때문에 우리가 컴퓨터의 언어를 배워야 한다. 우리가 프로그램을 배우는 것이 우리의 세계에서 동작하는 방법을 기계에게 가르치는 것보다 쉽기 때문
프로그래밍?
- 사용자의 요구를 충족시키기 위해 컴퓨터 내에 있는 자원에게 내리는 명령문들의 집합이다. 가끔은 프로그래머 스스로가 사용자가 되기도 한다. 창업을 하거나 모바일 게임을 만드는게 아니라 자신을 위한 프로그램을 짤 수 있다. 어떤 때는 문제를 해결하기 위해 혹은 무언가 해보기 위해 프로그래밍을 한다.
- 수작업으로 해야하는 작업을 25~100줄의 코드로 할 수도 있다.
- 또한 오픈소스 학습관리 시스템인 사카이(Sakai)에서 작업하면 독창적인 아이디어를 수백만 사용자들과 나눌 수 있다.
- 컴퓨터는 문자 그대로 받아들이기 때문에 정확하게 입력해야 한다. 컴퓨터는 우리가 뜻하는 것과 말하는 것의 차이를 구분 못한다.
📖컴퓨터의 내부 구조
하드웨어?
- 하드웨어에 대해 말하고자 하는 이유는 보조 기억장치, CPU, RAM, 주변 장치, 입력 장치와 같은 단어들을 이해하고 사용할 수 있어야 하기 때문이다.
- 라즈베리 파이는 '단일 보드 컴퓨터'이다. 이런 것들은 점점 작아지고 있으며, 흥미로운 것은 구조는 같지만 부품 개수는 줄어들고 있다는 것이다.
- 컴퓨터에서 뇌와 가장 비슷한 기능을 하는 것은 '소프트웨어'이다. (물론 컴퓨터는 뇌가 없다.)
- 하드웨어에서 뇌와 가장 비슷한 기능을 하는 것은 마이크로 프로세서 혹은 '중앙연산처리장치(CPU)' 라고 한다. 1초에 30억 번씩 무엇을 다음에 해야 하는지 묻는다. 뒤에 있는 32개나 64개의 작은 핀들을 통해 1초에 30억번 명령을 보낸다.
- 명령을 CPU에 대고 말할 수 없기 때문에 메인 메모리에 명령이 저장되어 있다. 메인 메모리는 아주 빠르다. 메인 메모리가 CPU에 필요한 것을 공급한다. CPU가 새로운 명령이 필요하면 메인 메모리에게 어디에 명령이 있는지 물어보고 메인 메모리에게 전달받은 명령을 실행한다. 다른 명령을 요청하면 CPU가 또 실행한다. 이는 프로그래밍의 핵심이라고 볼 수 있다.
- 마더보드(메인보드)는 모든 부품들을 연결하기 때문에 마더보드라고 부른다. 메모리만 있으면 아무 것도 할 수 없다. 마더보드에 끼워 넣어야 사용할 수 있다. 마더보드는 모든 부품들을 연결해준다.
- 하드 드라이브는 보조 기억장치이다. 보조 기억장치가 메인 메모리와 다른점을 살펴보면, 우선 메인 메모리는 매우 빠르다. 하지만 전원을 끄면 정보가 사라진다. 워드 파일, 텍스트 파일 같은 것들을 기록해 두려면 오래 저장할 수 있는 곳에 보관해야 한다. 보조 저장소가 그 역할을 한다. 보조 저장소는 전원이 꺼져도 영구적으로 메모리를 저장한다. 외형을 살펴보면 돌아가는 원판이 있는데 자성체와 전자가 이것의 자기를 만들고 없앤다. 디스크가 1분에 몇 번 회전하는지에 따라 성능을 구분하기도 한다. 운영 체제, 파일, 응용 프로그램이 저장되는 곳이다. 컴퓨터가 꺼져있는 동안 보관되고 켜지면 로딩한다.
- CPU는 메인 메모리에서 데이터를 받아 1분에 30억개의 작업을 한다. 전기전자를 잘 안다면 알고 있겠지만, 작은 은색들은 축전지이고 색깔 있는 것들은 저항기이다. 현대 CPU는 1960년대와 달리 축전기, 저항기, 트랜지스터 회로가 극소화 됐다. 광학적인 방법으로 더 작고 더 많이 회로를 새기는 것이다. 현재 주머니에 컴퓨터를 갖고 다닐 수 있는 이유는(스마트폰) 여기에 있는 CPU, 메모리, 저장소 등 모든 것들이 작아지고 작아져서 단일 보드 컴퓨터인 '라즈베리 파이'에 CPU, 메모리, 키보드 같은 장치 등 모든 것들을 놓을 수 있는 것이다.(아직은 여기에 보조 기억장치가 없다. USB를 통해서 보조 기억장치에 연결된다.) 스마트폰은 보조 기억장치가 내장되어 있다.
- CPU는 생각을 하고 프로그램을 실행시킨다. 무엇을 다음으로 해야할 지 물어본다. 별로 똑똑하지는 않지만 매우 빠르다. 아주 잘 짜여진 소프트웨어가 지능 역할을 대신한다. 폰의 음성인식 기능은 저장공간이 많고 속도가 빠르기 때문에 가능한 것이다.
- 입력 장치는 키보드, 마우스, 펜이다.
- 출력 장치는 우리가 보는 스크린이다.
- 메인 메모리는 빠르게 작동하며 프로그램을 저장한다.
- 보조 기억장치는 영구적으로 데이터를 저장한다.
- 내장된 보조 기억장치로 플래시 메모리 혹은 스태틱 RAM 사용이 늘어나고 있다. 아마 몇 년 후에는 별도로 장착하는 보조 기억장치를 찾아볼 수 없을 것이다.(영구적인 메모리란 지워지지 않는 저장소라는 말이다.)
📖언어로써 파이썬
- 파이썬이 최근에 인기가 많아진 이유는 배우기 쉽고 간결하고 강력하기 때문이다.
- 파이썬을 사용해 소프트웨어를 개발하는 것을 배우며 문법 에러를 자주 만나게 될 것이다. 문법 에러가 부족한 프로그래머라는 것을 의미하지 않는다.
- 프롬프트에 이상한 것을 치면 파이썬은 받아들이지 않을 것이다. 그래서 파이썬이 받아들일 수 있는 언어를 배우고자 하는 것이다!
📖 (학습하기 전)예약어, 순차문, 조건문 및 반복문
- 처음에는 원래 이해하기 힘들다. 힘들어도 참고 따라하자. 용어부터 시작해서 문장과 문단을 만들어 이야기를 만들 것이다.
- 예약어는 무엇일까? 지정한 의미로만 쓰이는 단어이다. 지정하지 않은 다른 의미로는 쓸 수 없다. 일종의 약속과 같다. 예를 들어, 강아지한테 "저 TV 프로그램 어때?" 라고 물어보면 전혀 알아듣지 못한다. 또한 "목요일까지 기다렸다가 수의사 만나러 갈 거야?" 라고 물어봐도 알아듣지 못한다. 하지만 "산책하러 갈 거야?" 라고 물어보면 "산책"을 알아듣고 나갈 것이다. 이처럼 강아지는 "어쩌구 저쩌구.. 간식!", "어쩌구 저쩌구.. 산책!" 으로 듣는다. 이것이 파이썬이 예약어를 보는 방식과 같다.
- 단어 class를 보면 예약어로서 알고 있는 의미로 받아 들이고, 단어 zap을 보면 사용자 마음대로 사용할 수 있다. 예를 들면 변수 이름으로 사용할 수 있다.
- 파이썬에 있는 예약어는 아래와 같다.
- and
- del
- if
- pass
- in
그저 파이썬 예약어로 돼있을 뿐이다. 파이썬 자체가 사용하는 어휘이다.
- 파이썬 프로그램은 문장으로 구성되어 있다. 컴퓨터가 다음으로 원하는 것이 있기 때문에 순서가 있다.
- 문장을 쌓아 문단으로 만든다. 프롬프트에
python3
라고 친 다음에 한 문장 입력하고, 또 한 문장 입력하여 실행하는 것을 반복하는 것은 불편하고 생산적이지가 않다. 따라서, 프로그램이 길어지면 스크립트로 작성하는 것이 편리하다. 파일에 프로그램을 짜면 파이썬이 코드를 순서대로 읽는다. 파일 이름은 .py
로 지정한다.
- 프로그래밍에는 몇 가지 기본적인 패턴들이 있다. 이 패턴들을 이해하는 것은 매우 중요하다. 첫 번째는 순차문이다. 말 그대로 순서대로 진행하는 것이다. 조건문은 어느 부분을 건너뛰는 것이다. 반복문은 계속 반복하는 것이다. 우리는 같은 일을 계속 반복하는 것을 질려하고 컴퓨터는 우리보다 반복적인 일을 잘한다. 반복할 문구를 저장해 두기도 한다.
📖변수, 표현식, 문장
- 파이썬의 기본 토대인 변수, 상수, 명령문, 표현식에 대해 알아보자.
- 먼저, 상수에 대해 알아보자면 상수는 변하지 않기 때문에 상수라고 한다.
숫자, 문자열 등이 상수이고 계산을 위해 사용한다.(예를 들어 만약 40시간 보다 긴 경우 무엇인가를 실행하도록 한다면 이때 40이 상수로 쓰인다.)
- 변수는 메모리를 할당하고 이름을 지어 무언가를 그 곳에 넣을 수(담을 수) 있다. 보통은 한 개의 값만 넣는다. 컬렉션을 배울 때 한 개 이상의 값을 변수에 넣을 수 있다는 것을 보게 된다.
- 대입문에서 상수를 지정한다. 대입문은 화살표와 같다.
- 변수 이름을 정하는데 규칙이 있다. 문자나 밑줄로 시작할 수 있다. 파이썬과 대화할 때 밑줄을 쓰기 때문에 되도록 변수 이름을 밑줄로 시작하지 않는다. 첫 글자 다음으로 문자, 숫자, 밑줄이 올 수 있다. 대소문자를 구분하지만 대소문자로 변수를 구별하지 말자.
📖연산자, 데이터 타입 및 타입 변환
- 표현식은 대입문 오른쪽에 쓸 수 있는 조금 더 복잡한 계산이다. 표현식에 사용하는 대표적인 것 중의 하나가 연산자이다. 프로그래밍에서 쓰이는 연산자는 수학 연산자와 매우 비슷하다. 하지만 수학에서 쓰는 특별한 기호 전체를 사용할 수 없기 때문에 키보드에 주어진 것을 쓴다. 이는 1960, 1970년대 키보드에 있었던 것을 사용해서 이런 연산자들을 만들었다.
(+, -, *, /, **, %)
- 연산자 순위에서 괄호가 제일 우선순위이다. 다음으로 거듭제곱, 곱하기(나누기), 더하기(빼기) 순서이다. 기본적으로 왼쪽에서 오른쪽으로 계산된다.
- 파이썬은 다양한 종류의 데이터를 사용한다. 더하기를 할 때 파이썬은 정수와 정수라는 것을 알고 두 개를 더해 정수를 만든다. 또한 문자열을 더할 수 있다.
- 프로그래밍에서 또 다른 요소는 주석이다. 파이썬, SEER 등 어떤 언어를 사용하든 주석은 무시된다.
#
으로 시작하는데 파이썬은 #
다음 글을 모두 무시한다. 주석은 사람이 읽기 위한 용도이다. 프로그래머나 프로그램을 수정할 사람이 읽는데 매우 유용하다. 특별한 문법을 사용하거나 변수 이름 짓는 것과 달리 규칙이 없다.
📖Quiz 1
📖Quiz 2
💬
Reference
부스트코스 팀 과제(미션)는 저작권 문제로 업로드 못하다니! 정말 아쉽다!😥