이 글의 작성자는 C/C++ 프로그래밍을 하던 사람이다. 이 글은 Python을 복습하며 작성하는 글이니, 부족한 부분이 있으면 얼마든지 피드백을 주시기 바란다.

 

프로그램에 필요한 것

우리는 Python을 이용하여 프로그램을 만들려고 한다. 그러면 프로그램에 필요한 요소는 무엇이 있을까?

계산기

계산기 프로그램을 만든다고 한다고 생각해보자. 무엇이 필요할까? 한 번 간단한 수식을 놓고 생각해보자.

2 + 3

23처럼 계산에 필요한 숫자들이 필요하고,
23에 대한 + 계산을 수행하는 방법이 필요하다.
숫자만 있어도 안되고, 방법만 있어도 안된다. 숫자와 계산하는 방법 둘 다 필요하다.

 

위의 내용을 계산기에 국한시키지 않고 뭔가 있어보이는 말로 표현하자면, 프로그램은 데이터(Data)알고리즘(Algorithm)이 필요하다.

계산기 예시에서 데이터는 숫자이며, 알고리즘은 덧셈 연산이다.

모든 프로그램은 위와 같이 데이터를 입력받고, 해당 데이터를 연산하는 과정을 한 번 혹은 수없이 많이 반복하며 결과를 도출해낸다.

 

객체(Object) : 데이터를 표현하는 방법

그렇다면 Python은 데이터를 어떻게 표현을 할까?

파이썬 시작하기에서 소개한 특징 중 다음과 같은 특징이 있었다.

객체지향(Object-Oriented) 언어이다

Python은 모든 데이터를 객체(Object)로 표현한다. 다른 객체지향 언어를 다뤄본 사람이라면 익숙하게 들리겠지만, 객체지향 언어를 다뤄본 적이 없거나, 프로그래밍 자체가 처음인 사람이라면 “그래서 객체가 뭔데?” 라는 생각이 들 것이다.

Python Glossary 페이지(용어 해설집)에서 object (객체)에 대해 찾아보자.

상태 (어트리뷰트나 값) 를 갖고 동작 (메서드) 이 정의된 모든 데이터. 또한, 모든 뉴스타일 클래스 의 최종적인 베이스 클래스입니다.

위의 설명을 읽고 이해한 사람도 있을 수 있으나, 이해하지 못한 사람도 있을 수 있다. 지금 당장 위의 문구가 이해가 가지 않아도 상관없다. 억지로 이해할 때 까지 머리를 싸매며 끙끙 앓지 말고, 아무튼 무언가를 나타내는 물건정도로 기억하고 넘어가자. 위의 문구를 이해하기 위해 멈춰있는 것은 시간낭비다.

객체

 

그렇다면 위의 계산기 예시에서 사용된 데이터는 무엇이 있었는가? 피연산자인 정수 23이 있었다. 그리고 이 둘은 객체이다.

22를 표현하는 정수형 객체이고,
33을 표현하는 정수형 객체이다.

위에서 보여준 형태로 숫자 3을 객체로 표현한다면 다음과 같이 표현할 수 있을 것이다.

객체 3

 

객체의 구성 요소

위의 객체 그림을 조금 더 뜯어보자. 객체를 구성하는 것들은 무엇일까?

3 객체 그림을 살펴보면, 세 가지 요소가 보일 것이다.

  • 정수라고 쓰여져 있는 라벨(?)
  • 3 이라고 쓰여진 값
  • 오른쪽 아래에 쓰여진 시리얼 넘버(?) 같은 것

정수라고 쓰여져 있는 라벨은 타입(Type)이라고 부른다. 객체가 있긴 한데, 이 객체가 어떤 형식의 데이터를 표현하고 있는지 알려주는 역할을 하는 것이 타입이다.
위의 예시에서는 정수 라벨이 붙어 있으므로, 이 객체는 정수를 표현하는 객체라는 사실을 알 수 있다.

Python에서는 정수형 객체의 타입을 int로 표현한다. 기본적인 타입들에 대해서는 다음에 알아보자.

3이라고 쓰여져 있는 값은 말 그대로 값(Value)이라고 부른다. 값은 사전적인 의미 그대로의 값(하나의 글자나 식이 취하는 수)을 의미한다.
위의 예시에서는 3이라고 적혀 있으므로, 이 정수형 객체는 3이라는 정수를 표현하고 있다는 것을 알 수 있다.

마지막으로 시리얼 넘버 같은 것은 아이덴티티(identity)라고 부른다. 이게 뭐냐면, 우리 흔히 ID라고 부르는 것이 Identity의 약어이다. 아이덴티티는 객체의 주민등록번호 역할을 수행한다. 따라서 각 객체마다 고유한 값을 지니게 된다.

다른 언어를 공부한 사람들이라면 이해할 수도 있는 이야기인데, 특정 환경에서는 메모리 주소를 객체의 id로 사용하기도 한다.

 

객체의 특징

그러면 이번에는 객체의 특징을 간단하게 알아보자.

 

  • 타입을 바꿀 수 없다

객체의 타입은 한 번 정하면 바꿀 수 없다. 한 번 정수형 객체로 태어났으면, 끝까지 정수형 객체로 살아야 한다. 이러한 타입의 특징을 강타입(Strong Typing) 이라고 부른다.

반대로는 약타입(Weak Typing)이 있다.

 

  • 가변성(Mutability)가 존재한다

가변성은 객체의 값 수정 가능 여부를 의미한다. 만약 객체의 값을 수정할 수 있으면 가변(mutable)이고, 객체의 값을 수정할 수 없으면 불변(immutable)이다.

 

  • 객체를 내 손으로 없앨 수는 없다

Python에서는 이미 생성된 객체를 직접적으로 없애는 기능은 없다.

만약 C/C++이라면, malloc()이나 new등으로 생성한 메모리를 free()나 delete로 해제할 수 있었지만, Python에서는 그런 게 없다.

그러면 “한 번 생성한 객체는 영원히 사라지지 않는거냐?” 라고 물어보면 그건 또 아니다. 이는 Python에서 특정 객체가 더 이상 필요하지 않다고 판단하면 Python이 알이서 제거해준다.

이러한 동작을 가비지 컬렉션(Garbage Collection)이라고 부른다.

그러면 가비지 컬렉션은 어떻게 이루어지는 것일까? 다음 포스트에서 변수(Variable)에 대해 익히면서 알아보자.

 

Categories:

Updated:

Comments