파이썬 강좌 – 개발과 관련된 용어

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

개발 프로그램

프로그램에는 게임이나 워드프로세서 등 다양하게 존재한다고 앞서 말씀드렸습니다. 그 중 개발자와 특별히 친숙한 프로그램이 몇 가지가 있습니다.

  • 컴파일러(compiler): 고급 언어(high-level language) 로 쓰여진 소스 코드(source code) 를 컴퓨터가 사용하기에 용이한 형태로 번역하는 프로그램. C++ 등의 언어는 컴파일러가 필요하다.
  • 인터프리터(interpreter): 고급 언어로 쓰여진 코드를 한 줄씩 즉시 실행하는 프로그램. 파이썬은 인터프리터를 통해 실행된다. 인터프리터로 실행되는 언어 또는 파일을 스크립트(script) 라고도 한다.
  • 텍스트 에디터(text editor): 소스 코드를 작성하는 프로그램. 작성한 후 코드의 번역이나 실행은 컴파일러나 인터프리터에게 맡긴다. 메모장, Microsoft Visual Code 등이 있다.
  • 통합개발환경(IDE: Integrated Development Environmnet): 위 세가지 프로그램을 포함하여 개발자가 개발하기 쉽도록 갖가지 부가기능을 갖춘 종합 프로그램. Microsoft Visual Studio, Eclipse 등이 있다.

요상한 말들이 굉장히 많이 등장했습니다. 위 프로그램들은 실제 개발자와 티키타카하는 프로그램들입니다. 개발환경을 세팅하는 것도 아주 큰 화두입니다. 어떻게 개발하냐에 따라서 생산성이 크게 좌지우지 되니까요.

  • 고급 언어(high-level language): 사람이 이해하기 편리한 언어. 컴퓨터는 이해하지 못한다. 고급이라 하여 럭셔리하고, 저급이라 하여 추잡하다는 뜻은 절대 아니다. 현대의 거의 모든 프로그래밍 언어가 고급 언어에 해당된다.
  • 저급 언어(low-level language): 사람이 이해하기 굉장히 까다로우나 컴퓨터가 이해할 수 있는 언어. 기계어가 해당된다.
  • 소스 코드(source code) : 고급 언어로 작성한 명령문, 혹은 그 파일을 뜻함. 편의상 코드로 지칭.

프로그래밍 언어에는 굉장히 다양한 종류가 있습니다. 여전히 성능이 극한으로 중요한 기계에서 많이 쓰이는 C, 객체지향언어의 정수라 불리우는 C++Java, 스크립트 언어의 대표주자 javascriptpython 등등 헤아릴 수가 없겠지요. 하지만 이 모든 프로그래밍 언어는 사람이 보고 이해할 수 있는 고급 언어에 해당합니다.

print('hello, world')

위 파이썬 코드는 ‘hello, world’를 모니터에 출력하는 코드입니다. print라는 단어도 보이네요. 괄호도 보이고, 따옴표도 보입니다. 파이썬을 한번도 접해보지 못하신 분들은 무슨 뜻인지 당연히 모를 것입니다. 이는 "안녕하세요"를 뜻하는 아랍어 مرحبا를 보고 이해를 하지 못하는 것과 같은 원리입니다. 배우면 할 수 있을 것입니다.

반면 컴퓨터가 이해하는 저급 언어인 기계어는 배우는 것도 거의 불가능합니다. 나름대로의 규칙이 있겠지만 너무 복잡하기 때문입니다. 기계어는 01로 밖에 표현하지 못합니다. 위 코드 하나라도 기계어로 표현한다면 몇 백, 몇 천의 01을 조합해야 할 지 모릅니다.

기계어 표 기계어 예시. 지저스…

컴파일

컴파일(compile)은 좀 더 범용적인 의미에서, 개발자나 사용자가 다루기 쉬운 형태(코드나 파일의 조합 등)에서 실제 컴퓨터에서 사용되거나 실행될 수 있는 형태로 변환하는 작업을 의미하기도 합니다. (예시 추가 예정) 이러한 변환은 프로그래밍 세계에서 흔한 개념이므로 기억하고 있도록 합시다.


명령 줄 인터페이스

본격적으로 파이썬에 대해 공부하기 전에 또 알아두어야 할 기초 상식이 있습니다. 그것은 바로 개발자와는 친숙한 명령 줄 인터페이스(Command Line Interface)입니다.

명령 줄 인터페이스란, 그래픽 유저 인터페이스(GUI)와는 대비되는 개념으로서, 마우스가 필요없이 단지 명령을 키보드로 입력하여 프로그램을 실행시키는 환경을 의미합니다. 멀리 갈 것도 없이, 시작 버튼을 누르고 "명령 프롬프트"라고 타이핑하여 검색해보세요. 그럼 검정 배경에 글자만 오돌토돌 나와있는 창이 뜰 것입니다.

명령 프롬프트 열기 명령 프롬프트 열기
명령 프롬프트에서 dir 명령을 실행한 모습 윈도우에서 명령 프롬프트를 실행하여 dir 명령을 실행시켜 보았다.

시작 버튼을 클릭하고, 폴더와 파일을 더블 클릭하고, 크롬에서 링크를 클릭하는 우리로서는 마우스를 이용할 수 있는 GUI가 항상 언제나 편리할 것처럼 보입니다. 하지만 특정 패턴이 있거나 규칙이 있는 상황에서는 CLI도 강력한 힘을 발휘할 수 있습니다. 그리고, 애초에 우리가 만들 파이썬 코드의 초기 단계에서는 GUI를 특별히 구현하지 않으므로 CLI 환경에서 밖에 실행을 시키지 못합니다. 간단한 코드를 실행하는 프로그램은 그래픽을 만들 필요가 없습니다. 고로 CLI 환경에 조금이나마 익숙해지는 것이 좋습니다. 이후에 언젠가, 프로그램을 실행시키면 정말로 어떤 창이 떠서 마우스를 이용하여 각종 설정을 할 수 있는 프로그램을 만들 수도 있습니다. 그것은 기초를 다지고 나서 하면 됩니다.

명령 줄 인터페이스는 다음과 같이 아주 다양한 용어로 불립니다. 의미는 대개 동일합니다.

  • 명령 행 인터페이스 : 줄이나 행이나 같은 말이지요.
  • 쉘(Shell) : 명령 행 인터페이스를 구현하는 프로그램을 뜻합니다.
  • 명령 프롬프트(Command Prompt): 윈도우에서의 CLI 프로그램 이름입니다.
  • 파워쉘(PowerShell): 윈도우에서의 좀 더 발전된 CLI 프로그램 이름입니다.
  • 콘솔(Console): 인터넷 브라우저에서도 쓰이고, 좀 더 범용적으로 쓰이는 말입니다.
  • 터미널(Terminal): 리눅스나 맥 계열에서 주로 쓰는 말입니다.
  • Bash: 리눅스 계열에서 쓰는 CLI 프로그램 이름입니다.

앞으로 강의에서는 콘솔 창 이라고 이야기 하겠습니다.

콘솔 창에서 명령을 실행한다라는 말은 프로그램을 실행한다라는 말과 동일합니다. 일례로 ipconfig 명령은 현재 인터넷 연결 상황이 어떻게 되는지를 출력하라는 명령입니다. 하지만 ipconfigC:\Windows\System32\ipconfig.exe 경로에 존재하는 실제 프로그램이기도 합니다.

콘솔 창은 일반 텍스트 창과는 조금 다릅니다. 한 줄에 하나의 명령만 사용할 수 있습니다. 명령어를 입력하고 엔터(Enter) 키를 누르는 즉시 명령을 해석하여 실행하려고 시도합니다. 올바르지 않은 명령은 찾을 수 없다고 에러를 내뿜습니다. 여러 개의 명령을 한번에 사용하려면 특별한 테크닉이 필요하나, 중요하지는 않습니다.

콘솔 창에서는 일반적인 단축키도 잘 먹지 않습니다. 특히 Ctrl+C 단축키는 콘솔의 세계에서는 강제 종료와 같은 의미여서, 프로그램이 한창 실행 중일 때 Ctrl+C를 누르는 순간 프로그램을 강제 중지시킬 수 있습니다. 원래의 Ctrl+C는 복사인데, 그렇다면 복사를 어떻게 할까요? 윈도우시라면 콘솔 창의 글자를 드래그하고 마우스 오른쪽 클릭을 눌러보세요. 붙여넣으려면 아무것도 선택하지 않은 채로 한번 더 마우스 오른쪽 클릭을 누르면 복사한 글자들이 붙여넣어집니다. 맥은 추가 예정입니다.

특별한 GUI가 없어서 CLI 환경에서 구동할 수 밖에 없는 프로그램이라도, 프로그램에게 특별한 상황을 알려줘야 할 때가 분명 있을 겁니다. 이미지 변환 프로그램을 상상해보세요. 변환된 이미지의 포맷은 어떤 것으로 할 것인지, 해상도는 어느 정도로 할 것인지, 이름 지정은 어떻게 할 것인지 일일히 지정해주어야 할 것입니다. CLI 프로그램에게는 옵션(option) 이란 것이 있습니다. 옵션은 하이픈(-)을 이용하여 인자(argument) 로서 프로그램에게 넘겨집니다 (pass) .

실제 컴파일러나 인터프리터는 대개 GUI가 없는 프로그램이 대다수입니다. 아래는 실제 c언어의 컴파일러인 gcc를 실행할 때 쓰는 명령의 예시입니다.

gcc -pg -mfentry -mnop-mcount -o hello hello.c

위 예시는 당연히 알 필요는 없습니다. 콘솔 창을 통해 프로그램을 실행하려면 프로그램 이름을 먼저 써야 하고, 이후 하이픈(-)으로 옵션을 줄 수도 있다. 정도만 기억하고 있으면 됩니다. 그래서 위 명령은 gcc가 프로그램 프로그램 이름이고, -pg ... hello.c는 프로그램에게 넘길 옵션인 것만 이해하면 됩니다.


연습문제

  • 컴파일러는 무엇인가?
  • 컴파일의 좀 더 범용적인 의미는 무엇인가?
  • 인터프리터란 무엇인가?
  • CLI의 여러 유사어 중, 앞으로 강좌에서 쓸 용어는 무엇인가?
  • 텍스트 에디터란 무엇이며, 어떤 종류가 있나?
  • 콘솔 창에서 프로그램을 어떻게 실행시키는가?
  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

Scroll to top