본문 바로가기
프로그래밍/Python

[인공지능(AI) 기초 다지기] 파이썬 언어의 특징 : 컴파일러/인터프리터 언어란? 변수란? 컴퓨터의 반올림 오차

by hi-rachel 2023. 1. 15.

🐍 파이썬의 특징 - 1

- 파이썬(Python)은 플랫폼(OS, 운영체제) 독립적인(OS에 상관없이) 인터프리터 언어이다. 

 

인터프리터 언어란?

C, JAVA 등 컴파일러 언어와 달리 별도의 번역과정 없이 소스코드를 실행시점에 해석하여 컴퓨터가 처리할 수 있도록 하는 언어이다. (소스 코드 실행기 프로그램)

= 컴퓨터에 명령을 내리려면 기계어가 필요, 인터프리터는 컴파일러처럼 소스 코드를 기계어로 번역하는 행위를 하지만 번역한 후 그 즉시 프로그램을 실행하지는 않는 컴파일러와 다르게 번역과 분석이 끝나면 프로그램을 실행하여 결과를 바로 내놓는다.

또 컴파일러는 기계어로 번역을 한 후 목적 파일을 생성하는 반면 인터프리터는 그렇지 않다. => 컴파일러 단점 : 컴파일 시 전체 프로그램 코드가 생성되므로 한 번에 많은 기억장소가 필요하다 // 장점 : 컴파일이 끝난 프로그램은 완전히 분석된 상태이므로 다시 코드를 분석할 필요 없이 바로 실행할 수 있다(실행속도가 빠르다) + 최적화가 용이하다.

인터프리터 단점: 실행 중에 동적으로 소스 코드를 분석하고, 최적화가 어려우며, 실행 중에 매번 분석을 진행하므로 컴파일러보다 실행속도가 느리다. 장점 : 결과를 바로 확인할 수 있으며 컴파일 하는데 시간이 걸리지 않는다, 번역 시 그때그때 필요한 실행 코드를 생성하므로 사용하는 메모리가 적다.

 

 

🐍 파이썬의 특징 - 2

- 파이썬은 객체 지향 동적 타이핑 언어다.

객체 지향 언어란?

: 실행 순서가 아닌 단위 모듈(객체) 중심으로 프로그램을 작성

하나의 객체어떤 목적을 달성하기 위한 행동(method)속성(attibute)을 가지고 있다.

 

동적 타이핑(Dynamic Typing) 언어란?

: 프로그램이 실행하는 시점에 프로그램이 사용해야할 데이터에 대한 타입을 결정한다.

 

 

+) 자바스크립트는 무슨 언어일까?

더보기

인터프리터 언어. 하지만 플랫폼에 따라 엔진 내부에서 컴파일 과정을 거친다. [참고 : JavaScript, 인터프리터 언어일까?]

+ 객체 기반의 스크립트 프로그래밍 언어

  • 스크립트 언어(scripting language) : 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어, 스크립트 언어는 응용 프로그램과 독립하여 사용되고 일반적으로 응용 프로그램의 언어와 다른 언어로 사용되어 최종사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해준다.

 

 

🌟 변수의 의미

변수(variable)란?

: 데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름

변수는 메모리 주소를 가지고 있고 변수에 들어가는 메모리 주소에 할당된다.

변수가 선언되는 순간 메모리 특정 영역에 물리적인 공간이 할당된다.

현대 컴퓨터는 폰 노이만의 구조를 따르고 있는데 이는 값을 입력하거나 프로그램을 실행할 경우 그 정보를 먼저 메모리에 저장⭐️시키고 CPU(연산장치 + 제어장치 + 레지스터로 구성)가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결괏값을 전달하는 것이다.

[참고 : 2023.01.14 - [CS] - [CS]컴퓨터 주요 구성 요소(CPU, Memory, IO Devices, System Bus), 메모리 계층과 각 메모리 특징]

프로그래밍에서 변수는 값을 저장하는 장소이고, 변수는 메모리에 주소를 가지고 있고 변수에 들어가는 값은 메모리 주소에 할당된다.

A = 1

즉 위 코드 'A = 1'은 A라는 이름을 가진 메모리 주소에 1을 저장하라는 의미이다.

'='의 의미는 '같다'가 아닌 메모리 주소에 해당 값을 '할당(연결)'한다는 의미이다.

A = [5, 4, 3, 2, 1]
B = [1, 2, 3, 4, 5]
B = A
B    # [5, 4, 3, 2, 1]

참고로 List(시퀀스 자료형, 여러 데이터들의 집합)에서 위와 같이 B = A를 해주면

A의 메모리 주소를 B도 참조해 같은 메모리 주소를 가리키게 되어 같은 값이 나오는 것이다.

A = B를 해주면 A가 B의 메모리 주소를 가르켜 A의 값이 B와 같아지고, B = A를 해주면 B가 A와 같은 메모리 주소를 가리켜 A와 같은 값이 된다.

같은 메모리 주소를 가르키기 때문에 A나 B의 값을 수정하면 B, A도 같이 수정된다.

헷갈리면 직접 해보자.

 

 

 

 

 

 

 

🐍 파이썬의 List

list에 있는 값들은 주소(offset)를 가진다 => 주소를 사용해 할당된 값을 호출한다.

list명[시작 index : 끝 index : step ] => list에서 시작 index부터 끝 index까지 step단계로(예_ 두 개씩) 값을 호출

list명[ : ] => list 전부 가져온다. // list명[ : : -1 ] => list 거꾸로 전부 가져온다.

 

a = [1, 2, 3]
b = a[ : ]

리스트 복사는 이렇게 되지만 참고로 이중 리스트(리스트 안에 리스트, 예_ [[1,2], [3,4]])는 이런 방법으로 복사할 수 없기 때문에 copy 라이브러리를 사용해야 한다.

import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)

 

🐍 파이썬 기본 데이터 유형

 

🌟 컴퓨터의 이진수

파이썬에서는 자유로운 형 변환이 가능한데 

a = 10
print(a)    # 10 정수형

a = float(10)
print(a)    # 10.0 실수형

b = 15.6
b = int(b)
print(b)    # 15

실수(float) 형에서 정수(int) 형으로 변환 시 소수점 이하 내림이 된다.

파이썬 예전 버전(2.7)에서는 반올림 오차가 났었는데 그 이유는 단순한 실수를 이진수로 변환하면 무한소수가 되기 때문이다. => 0.1이 1이 될 때까지 계속...

컴퓨터에서는 하나의 숫자를 나타내기 위한 메모리의 크기가 제한되어 있어서 특정 소수점 이하는 생략하고 가장 비슷한 숫자로 표현된다.

0.1 + 0.2 == 0.3    # False
0.1 + 0.2    # 0.30000000000000004

# 실수의 생략된 소수점을 보고싶다면 %precision 55 명령어를 사용한다(소수점 55자리까지 표현)
%precision 55
0.1    # 0.1000000000000000055511151231257827021181583404541015625
0.2    # 0.2000000000000000111022302462515654042363166809082031250

round(0.1 + 0.2, 5) == round(0.3, 5)    # True

따라서 실제 실수 소수점 뒤의 값이 생략되어 표현됐기 때문에 실수를 계산할 때 미세한 오차를 가질 수 있으므로 round() 명령을 사용하여 유효숫자를 지정한 반올림을 한 후에 비교해야 한다. => round()는 두 번째 인수로 반올림할 소수점 이하의 유효숫자의 개수를 받는다.

 

 

이진수 십진수 변환기 등을 써봤을 때 설명 없이 실수도 간단히 변환되길래 이 부분에 대해서는 생각 못했는데 뒤에 생략한 소수점이 있었다. 이런 점들을 살펴보니 재밌었다.

 

더 자세한 내용은 실제 강의를 들어보길 추천한다.

인공지능(AI) 기초 다지기

 

인공지능(AI) 기초 다지기

부스트코스 무료 강의

www.boostcourse.org

 

※ 위 내용은 부스트코스(boostcourse) 인공지능(AI) 기초 다지기 강의를 듣고 공부하며 내용을 정리한 글입니다.

 

 

네이버 부스트코스에서 진행하는 코칭스터디 8기 <Data Science>를 수료하고 도움이 되어서 9기 <AI Basic 2023>도 신청했는데 뽑혀 이번주부터 스터디가 시작했다. 파이썬 기초는 이미 배운 상태였지만 강의를 들어보니 자세하게 더 설명해 주는 내용이 있어 다시 상기시키며 공부할 점이 많고 인공지능에 대해 무료로 배울 수 있다는 점에 앞으로 기대가 된다 😎 

 

 

추가 참고 사이트

Opentutorials.org

컴파일러 vs 인터프리터 비교 (파이썬 vs 자바)

데이터 사이언스 스쿨 2.2 부동소수점 실수 자료형