Python 언어 특징

Syntax Notes

목록 보기
3/4

1️⃣ Interpreter

Python 코드는 미리 기계어로 변환하지 않고 실행 시점에 한 줄씩 번역하면서 실행한다.

내부적으로 .py → .pyc(바이트코드)로 변환하긴 하지만, Java처럼 미리 컴파일해서 실행하지는 않는다.

🔹 대표적 인터프리터

: CPython(기본이자 가장 널리 쓰임), PyPy(JIT 지원, 속도 빠름), Jython(JVM 위에서 동작하는 Python)


2️⃣ 자바와 비교

파이썬의 경우,
source1.py -- 인터프리터 → 실행 (즉시 해석)

자바의 경우,
source1.java -- javac 컴파일러 → bytecode.class -- JVM → JIT 컴파일 후 실행

Python은 유연성과 실행 편의성, Java는 성능과 이식성에 초점을 둔 언어이다.

▫️ 바이트코드란?

바이트코드는 CPU가 직접 실행할 수 없고, 가상머신(VM)이 해석해야만 실행된다.
다시 말해, 바이트코드는 CPU용이 아니라 직접 실행할 수 없고, 그 언어의 런타임(e.g. JVM, CPython)이 필요하다.

 Bytecode기계어 (Machine Code)
실행 주체VM (JVM, Python VM 등)CPU (물리 하드웨어)
플랫폼 의존성독립적 (OS / CPU 상관없음)의존적 (CPU 아키텍쳐마다 다름)
사람이 읽기조금 가능(명령이 단순함)거의 불가능.(이진수 수준) cf. 기계어를 사람이 읽기 쉽게 바꾼 건 어셈블리어. 기계어와 1:1 대응되는 저수준 언어.
목적이식성과 안전성성능 극대화
예시Java의 .class, Python의 .pyc.exe, ELF, ARM binary 등

🔹 패러다임

Java는 객체 지향으로 코드를 짜라는 색깔이 아주 강했다. (클래스 안에 넣어라, 메서드로 정의하라, 전역 함수 만들지 마라)
요즘 Java는 람다, 스트림이 들어오며 함수형 요소가 꽤 생겼지만, 기본 디자인 철학은 OOP 중심이다.

반면, Python은 한 가지 방식에 묶어두지 않고, 절차적(스크립트처럼 위에서부터 순서대로 실행되는 코드), 객체 지향 등 여러 패러다임을 모두 허용하는 언어다.
"일급함수"를 지원하는 함수형 프로그래밍 스타일도 사용한다.

▫️ 일급 함수(First class function)란?

함수를 값처럼 다룰 수 있다. 파이썬에서 함수나 객체(Object), 클래스, 숫자, 리스트 등 1급 객체이다.

1급 객체의 조건
: 1. 변수에 할당할 수 있어야 한다. 2. 다른 함수의 인수로 전달 가능해야 한다. 3. 함수가 그걸 반환할 수 있어야 한다.

1. 함수를 변수에 넣을 수 있음

def add(x, y):
    return x + y

f = add      # 함수 자체를 변수에 담음
print(f(3, 4))  # 7

2. 함수를 다른 함수의 인수로 넘길 수 있음

def apply(func, x, y):
    return func(x, y)

print(apply(add, 2, 3))  # 5

3. 함수를 리턴값으로 돌려줄 수 있음

def make_adder(n):
    def inner(x):
        return x + n
    return inner

add5 = make_adder(5)
print(add5(10))  # 15
  • make_adder(5) 호출  →  파이썬은 n = 5로 함수를 실행한다. 내부에서 또 하나의 함수 inner(x)가 정의됐다. make_adder는 inner를 실행하지 않고 n으로 5을 갖고 있는 inner 자체를 리턴한다.
profile
학습 메모장 : 코테 및 알고리즘, 언어 문법, Java 기본 강의...

0개의 댓글