기린(a giraffe)과 사람들이 다니는 길인 보도(a sidewalk)에 왜 똑같이 a가 붙는 것일까?
왜냐하면 기린과 보도 모두 영어에서 사물(things)이라고 불리는
명사이기 때문이며, 이러한 사물을 파이썬에서는 사물을 객체(object)라고 부른다.
객체에 대한 개념은 컴퓨터 세계에서 매우 중요한 개념들 중의 하나다.
객체는 프로그램 내에 있는 코드를 구성하는 방법이며 복잡한 개념을 좀 더 쉽게 만들어준다.
파이썬에서 객체가 어떻게 동작하는지 정말로 이해하려면
객체들의 종류를 알아야 한다.
자, 기린과 보도부터 시작해보자.
기린은 동물의 한 종류인 포유류 중의 하나다.
물론 기린은 살아있는 동물 객체이기도 하다.
이제 보도에 대해 생각해보자.
살아있지 않다는 것 말고는 더 할 말이 없을 것 같다.
이런 것을 무생물(다시 말해서 살아있지 않은) 객체라고 부르도록 하자.
포유류(Mammals), 동물(Animals), 생물(Animate), 무생물(Inanimate)이란 용어는 사물들을 구분하는 방법이다.
사물을 클래스로 구분하기
파이썬에서 객체는 객체를 그룹으로 부분할 수 있는 클래스(class)에 의해 정의된다.
다음은 우리가 앞에서 정의했던 것들을 기반으로 한 기린과 보도에 맞는 클래스의
트리 다이어그램이다.
메인 클래스는 Things이다.
사물 클래스 밑으로 Inanimate과 Animate가 있다.
여기서 무생물은 Sidewalks로, 생물은 Animals와 Mammals, Giraffes으로 나눠진다.
파이썬 코드를 구성하기 위해서 클래스를 사용할 수 있다.
객체는 클래스의 구성원 (Member)으로 생각될 수 있으며,
클래스의 객체를 몇 개라도 생성할 수 있다.
이제 앞에서 봤던 트리 다이어그램과 같이 맨 위의 클래스부터 만들어보자.
클래스를 정의할 때는 클래스의 이름 다음에 class라는 키워드를 사용한다.
Things는 최상위 클래스이므로 이것부터 만들것이다.
class Things:
pass
우리는 이 클래스의 이름을 Things라고 하고 파이썬에게 더 이상
아무런 정보를 주지 않을 것이라고 알려주기 위해 pass 구문을 사용한다.
클래스나 함수를 만들었지만 그 안에 상세한 내용을 넣고 싶지 않을 경우에 pass가 사용된다.
다음으로 다른 클래스들을 추가하고 클래스들 간의 관계를 구축할 것이다.
자식과 부모
A라는 클래스가 B라는 클래스의 부분이라면 A 클래스는 B 클래스의 자식(child)이며,
B 클래스는 A 클래스의 부모(parent)가 된다.
클래스는 어떤 클래스의 자식이면서 다른 클래스의 부모일 수 도 있다.
트리 다이어그램에서 어떤 클래스가 다른 클래스 위에 있으면 부모이며,
어떤 클래스 밑에 있으면 자식이 된다.
예를 들어, Inaimate와 Animate는 Things 클래스의 자식이다.
이 말은 Things가 그들의 부모라는 의미다.
어떤 클래스가 다른 클래스의 자식이라는 것을 파이썬에게 알려주려면 다음과 같이
새롭게 만든 클래스 이름 다음에 괄호로 부모 클래스의 이름을 추가하면 된다.
class Things:
pass
class Inanimate(Things):
pass
class Animate(Things):
pass
여기서 Inanimate(Things)라는 코드를 사용하여 Inanimate라는 클래스를 생성하고
그 클래스의 부모 클래스가 Things라고 파이썬에게 알려준다.
다음으로는 Animate(Things)라는 코드를 사용하여 Animate라는 클래스를 생성하고
그 클래스의 부모 클래스가 Things라고 파이썬에게 알려준다.
같은 방법으로, Sidewalks 클래스를 만들어보자. 다음과 같이 부모 클래스를 Inaimate 클래스로 하여
Sidewalks 클래스를 생성할 수 있다.
class Sidewalks(Inanimate):
pass
그리고 Animals와 Mammals, Giraffes 클래스를 다음에 있는 클래스의 부모 클래스로 하여 생성할 수 있다.
class Animals(Animate):
pass
class Mammals(Animals):
pass
class Giraffes(Mammals):
pass
객체를 클래스에 추가하기
지금 우리는 여러가지 클래스들을 가지고 있는데,
이 클래스들에 어떤 것을 조금 넣어보면 어떨까?
우리에게 Reginald라는 이름의 기린이 있다고 해보자.
그 기린은 Giraffes 클래스에 속한다는 것을 알고 있지만, 프로그래밍에서
Reginald라고 불리는 하나의 기린을 묘사하기 위해서 사용할 수 있는 것은 무엇일까?
우리는 Giraffes 클래스의 한 객체(object)를 Reginald라고 부를 것이다
(어쩌면 여러분은 클래스의 인스턴스(instance)라는 용어를 봤을 수도 있다).
'Python > Python 기초' 카테고리의 다른 글
유용한 파이썬 모듈 (0) | 2014.11.04 |
---|---|
파이썬의 유용한 내장 함수 (0) | 2014.10.30 |
튜플 (Tuple) (0) | 2014.10.26 |
파이썬의 문자열 (0) | 2014.10.24 |
None 값 (The None Value) (0) | 2014.09.26 |