또르르's 개발 Story

[01] 개발환경 & Python 본문

부스트캠프 AI 테크 U stage/이론

[01] 개발환경 & Python

또르르21 2021. 1. 18. 20:05

모든 교육의 시작은 개발환경과 개발 언어에 대해서 배우는 것 같습니다.

오늘은 Computer System과 Python의 특징에 대해 알아봅니다. 

1️⃣ Computer System

1) OS(Operation System, 운영체제)

 

프로그램이 동작할 수 있는 구동 환경을 말합니다.

 

사용자(User)는 프로그램(Applications)를 사용합니다. 프로그램(Applications)는 사용자(User)의 요청을 수행하기 위해 Device Hardware에 자원을 요청합니다. 하지만 프로그램(Applications)는 직접 Device Hardware에 접근할 수 없기 떄문에 OS(Operation System, 운영체제)를 통해서 자원을 요청합니다.

 

OS(Operation System, 운영체제)는 프로그램 OS에 의존적(dependent) 합니다. 이 말은 즉, OS에 따라 프로그램의 작동 방법이 달라질 수 있다는 뜻이죠.

대표적으로 Window와 MacOS로 설명하면, Window의 실행파일들은 MacOS에서 구동이 되지 않습니다. 또한, MacOS의 실행파일들은 Window 환경에서 구동이 되지않습니다.

 

2) File System(파일 시스템)

 

모든 Device들은 파일을 저장할 수 있습니다. 노트북과 스마트폰은 모두 사진, 영상, 노래, 텍스트 파일 등을 저장할 수 있습니다. 이러한 파일들이 한 두 개 일 경우 문제가 되지 않지만, 100개, 1000개....10만개가 되면 원하는 파일을 찾기 쉽지 않을 것입니다.

 

따라서, OS에서는 File System이라는 것이 존재합니다.

File System이란 OS에서 파일을 저장하는 트리구조 저장체계를 말합니다.

여기서 트리구조란 정보를 저장하는 자료구조 중 하나로서, 나무(Tree)가 가지를 통해 뻗어나간 모습처럼 만들어진 자료구조입니다.

 

기본적으로 Window 컴퓨터는 로컬 디스크 (C:)를 기반으로 생성되며, Mac은 root를 기반으로 파일 시스템이 시작됩니다.

(재밌는 사실은 Window 컴퓨터의 로컬 디스크가 A, B가 아닌 C부터 시작된다는 것입니다. 강의를 들으면서 재밌게 들은 부분 중 하나인데 90년대 컴퓨터는 플로피디스크를 사용했기 때문에 A 플로피 디스크, B 플로피 디스크가 있었고 C부터는 하드웨어를 사용했다고 하네요. 😂)

 

3) 터미널

 

(저는 윈도우98이후 세대라 모르지만...) 예전에는 그래픽 기반의 컴퓨터가 아닌, 검은 바탕에 명령어를 사용해서 컴퓨터를 하는 방식이었습니다. 터미널은 mouse가 아닌 키보드로 명령을 입력받을 수 있는 명령 프로그램입니다.

 

현재 대부분의 컴퓨터(Window, Mac)는 그래픽 기반 유저 인터페이스(Graphical User Interface)를 사용하고 있고,

일부분의 컴퓨터(Linux => 서버용으로 많이 사용)는 커맨드 라인 인터페이스(Command Line Interface)를 사용합니다.

터미널은 모든 컴퓨터에는 존재하지만 GUI에서는 많이 사용하지는 않습니다.

각 터미널에는 프로그램을 작동하는 Shell이 존재합니다. Shell은 껍데기라는 뜻으로써, 사용자(User)가 명령을 내리면 OS에 접근하기 전 껍데기(?) 역할을 합니다. (보호?역할을 함으로써 안전성을 높인 것이라고 생각합니다.)

 

Shell 명령어는 아래와 같습니다.

 

2️⃣ Python의 유래

Python의 유래는 아시는 분은 아시겠지만 그리스 신화 속의 괴물 뱀python(피톤)의 이름입니다. 물론 파이썬의 창시자인 Gudio Van Rossum은 몬티 파이썬이라는 코메디 그룹의 이름에서 따왔다고는 합니다.

재밌는 사실은 Python의 창시자인 Gudio Van Rossum은 크리스마스에 할 일이 없어서 파이썬을 개발했다는 썰이 있는데요... 개발자의 진정한 자세가 아닌가 생각합니다.

 

 3️⃣ Python의 특징

1) 플랫폼에 독립적인 인터프리터 언어

플랫폼은 OS를 말합니다. 즉, 'Window, Linux, Android, MacOS, iOS 등 여러 OS에 독립적이다'라고 말할 수 있는데 이 뜻은 어떠한 OS를 가지고 와도 Python을 실행할 수 있다는 뜻이 됩니다. 이 부분이 이해가 안돼서 찾아봤는데

"정확히 짚고 넘어가야 하는 점은 소스 OS와 프로세서에 비종속적이고 바이너리 파일이 종속적이라는 점입니다."

이렇게 나오네요. 모든 언어는 개발자가 작성한 Source -> Compiler -> Assembler를 거치게 됩니다. 이 과정에서 바이너리 파일이 만들어지며, 바이너리 파일은 OS마다 다르게 생성됩니다. 하지만, Python은 소스코드를 바로 사용할 수 있는 인터프리터 언어이기 때문에 어떠한 OS에서도 사용이 가능합니다.

그렇다면 인터프리터 언어가 무엇인지 궁금해집니다. 인터프리터란 통역사라는 뜻입니다. 그렇다면 왜 언어에 통역사라는 말이 붙었을까요? 기업이나 국가의 수장들이 만나는 공적인 자리에서 통역사들을 끼고 회의를 진행하는 모습을 많이 보았을 것입니다. 통역사는 수장들 중간에서 통역을 해주는 역할을 하는데요. 수장 한 분이 한 문장 또는 두 문장을 말하면 바로 번역해 다른 수장에게 말해줍니다. 물론 수장이 10마디를 들은 후 한 번에 번역해 다른 수장에게 말해줄 수 있지만 그러면 내용을 기억하기도 쉽지 않고 대화의 흐름도 끊기겠죠.

 

인터프리터 언어도 똑같습니다. 전체 10줄의 코드를 한 번에 번역하는 것이 아니라 한 줄씩 번역하는 형태를 보입니다. 이러한 번역 과정은 별도의 기계어 변환 과정이 없이 바로 해석할 수 있다는 장점이 있습니다. 따라서 짧은 코드를 작성할 때 유리하다는 장점이 있죠.

 

하지만 문장이 길어지면 길어질수록 실행 속도가 늘어집니다. 한 번에 번역하는 것보다 여러 번을 나눠서 번역하다 보니 느려질 수밖에 없죠.

2) 객체 지향 동적 타이핑 언어

객체 지향적 언어란 절차 지향적 언어의 반대말입니다.

절차 지향적 언어는 알고리즘 순서대로 작 서한 언어를 말하는데요. 예를 들어, A 수행 -> B 수행 -> C 수행을 해야 하는 알고리즘이 있다면 그 순서대로 작성한 프로그램입니다. 하지만, 수행해야 하는 역할이 많아질수록 내용이 많아지게 되고, A 수행 -> C 수행 -> A 수행과 같은 중복이 생겨나게 됩니다.

 

따라서 객체 지향적 언어실행 순서가 아닌 단위 모듈(객체) 중심으로 프로그램이 작성되는데요. 함수, 클래스 개념을 사용해 객체를 만들고 그 객체를 불러와서 상호작용하는 방법을 사용합니다.

 

동적 타이핑 언어는 자료형이 없는 언어입니다. 자료형은 C/C++/JAVA를 다뤄봤던 분들은 아시겠지만 숫자, 문자열을 담는 그릇이라고 말할 수 있습니다. 하지만 Python에서는 프로그램이 실행되는 시점에 데이터 타입이 결정되므로 따로 자료형을 써주는 부담 없는 언어라고 말할 수 있습니다.

 

Comments