파이썬의 용어와 개념부터 다시 톺아보자.

Heebeom·2023년 3월 19일
0


파이썬은 매우 간결하면서도 강력한 언어이다. 하지만 문법이 간결한 특징 때문에, 많은 프로그래머들이 용어와 개념을 제대로 배우지 않는 경향이 있다. 이를 간과한다면, 파이썬의 고유한 특성 때문에 함정에 빠지기 쉽다.

오늘은 파이썬의 용어를 기반으로, 파이썬만의 개념에 대해 알아보도록 하겠다.

본 포스팅은 Al Sweigart의 저서인 『클린 코드, 이제는 파이썬이다』의 일부를 기반으로 작성되었습니다.


### 가비지 컬렉션 * 파이썬에는 메모리 할당과 해제를 해야 하는 시점을 추척해 부담을 덜어주는 **가비지 컬렉션(garbage Collection)**이 존재한다.
* 가비지 컬렉션이 없으면, **메모리 누수**와 **이중 할당 해제 버그**가 발생할 수 있다. * **메모리 누수(memory leak)** : 메모리 할당 해제를 잊어버리는 문제 * **이중 할당 해제 버그(double-free bug)**: 동일한 메모리를 두번 할당 해제해 데이터가 손상됨

리터럴

age = 42 + len('Zophie')
  • 리터럴(literal)은 사람이 직접 손으로 작성한 고정 값을 나타내는 소스 코드 상의 텍스트이다.
    • 위 예시에서 '42'라는 숫자와 'Zophie'라는 문자는 각각 정수와 문자열 리터럴이다.
    • 변수 'age'는 바뀔 수 있기 때문에, 리터럴이 아니다.

키워드

def agregarDosNumeros(primerNumero, segundoNumero):
	return primerNumero + segundoNumero
  • 파이썬은 다른 프로그래밍 언어와 같이 예약어가 존재하는데, 이를 키워드(keyword)라고 한다.
    • 위 예시에서, 'def'와 'return'이 키워드이다.
    • 키워드는 동작을 지시하는 말이므로, 변수 이름으로 사용할 수 없다.
    • 키워드는 무조건 영어로 표기해야 한다.

객체, 값, 인스턴스, 아이디

  • 파이썬에서 객체(object)는 데이터를 표현하는 개념이다.
    * 데이터란 숫자나 텍스트, 혹은 리스트와 딕셔너리 등의 데이터 구조를 전부 아우른다.

  • 모든 객체에는 값, 아이디, 데이터 타입이 있다.
    • 값(value): 정수 42 또는 문자열 'hello' 같이 개체가 나타내는 데이터
    • 아이디(identity): 객체를 나타낼 수 있는 유일한 정수로, id() 함수를 호출해서 확인할 수 있다.
    • 데이터 타입(data type): 정수, 문자열 같이 객체의 값의 종류를 나타낸다.
    • 객체의 요소에서 값만 변경 가능한 요소이다.

아이템

  • 리스트나 딕셔너리처럼 컨테이너 객체 안에 있는 객체를 아이템(item) 또는 원소(element)라고 한다.

가변 테이터 타입과 불변 데이터 타입

  • 객체의 값을 변경할 수 있다면 가변(mutable) 객체이며, 변경할 수 없으면 불변(immutable) 객체이다.
    가변 객체: 리스트(List), 딕셔너리(Dictionary), 집합(Set)
    불변 객체: 정수(Integer), 부울(Boolean), 문자열(String), 튜플(Tuple)

spam = 'hello'
print(spam, id(spam)) # hello 40718944

spam = 'good bye'
print(spam, id(spam)) # good bye 40719224
  • 변수를 불변 데이터 타입의 객체로 덮어쓰면 값을 변경하는 것처럼 보이지만, 사실 참조하는 객체가 바뀔 뿐이다.
    '=' 는 객체 자체가 아니라, 참조를 복사하는 연산자이다.
    위 예시의 spam 변수의 값이 'good bye'로 바뀐 것 같지만, 아이디 또한 바뀌었다.
    * 'hello'의 값을 변경할 수 없으니, 'good bye' 객체를 새로 생성해 참조한 것이다.

spam = ['cat', 'dog']
print(spam, id(spam))# ['cat', 'dog'] 33805576

# 1. append()로 아이템 추가하기
spam.append('moose')
print(spam, id(spam)) # ['cat', 'dog', 'moose'] 33805576

# 2. 인덱싱으로 아이템 변경하기
spam[0] = 'snake'
print(spam, id(spam)) # ['snake', 'dog', 'moose'] 33805576

# 3. 리스트 연결하기
spam += ['rat']
print(spam, id(spam)) # ['snake', 'dog', 'moose', 'rat'] 33840064
  • 가변 데이터 타입의 값은 제자리에서 바꿔치기(in-place) 방식으로 수정될 수 있다.
    위 예시의 1(append), 2(인덱싱) 번은 리스트의 값을 그대로 바꿔치기 한다.
    3(리스트 연결) 번의 경우, 새로운 아이디를 가지는 리스트를 만든다.

인덱스, 키, 해시

  • 파이썬은 0 기반 인덱스를 사용하며, 음의 인덱스도 지원한다.
    • 인덱스는 리스트, 문자열, 딕셔너리 등 에서 특정 객체를 찾을 때 사용한다.
    • -1은 리스트의 마지막 아이템, -2는 마지막에서 두 번째 아이템을 가르킨다.

  • 해시는 특정 값에 대한 일종의 지문 역할을 하는 정수이다.
    • 해시는 절대 변하지 않으며, 값이 같다면 해시도 반드시 같아야 한다.
    • 불변 객체는 모두 해시가 가능하고, 이를 해시 가능한 객체라고 한다..
    • 해시 가능한(hashable) 객체는 딕셔너리의 인덱스로 사용 가능하다.
    • 해시는 아이디와 달라, 두 객체 해시가 동일해도 아이디는 다르다.


컨테이너, 시퀸스, 매핑

  • 컨테이너는 여러 종류의 객체를 포함할 수 있는 객체이다.
    • 리스트, 딕셔너리가 포함된다.
    • 여러 데이터 타입을 한 컨테이너에 저장할 수 있다.

  • 시퀸스는 정수 인덱스를 사용하는, 순서 있는 컨테이너 객체이다.
    • 문자열, 튜플, 리스트가 포함된다.
    • 순서가 다른 경우는 같다고 볼 수 없다.

  • 매핑 인덱스 대신 키를 사용하는 컨테이너 객체이다.
    • 딕셔너리가 포함된다.
    • 인덱스 대신 키-값 쌍을 사용한다.
    • Python 3.6 부터는 삽입 순서가 보장된다.

모듈, 패키지

  • 모듈은 다른 파이썬 프로그램이 모듈의 코드를 사용할 수 있게 해주는 기능을 한다.
    모듈은 표준 라이브러리와 별개로, 자신만의 모듈을 만들 수도 있다.
    imort 키워드를 사용해 모듈을 불러올 수 있다.

  • 패키지는 init.py 이름의 파일을 폴더 안에 넣어서 생성하는 모듈둘의 집합이다.
    * 항상 폴더의 이름을 패키지 이름으로 사용한다.
profile
이도저도 아닌 개발자

0개의 댓글