2022-09-21 19:52:09

클래스, 객체, 인스턴스 용어 정리

클래스(class)는 틀, 객체(object)는 틀로 찍어낸 결과물로 볼 수 있습니다. 붕어빵 틀을 가지고는 붕어빵을 만들어낼 수 있고, 호두과자 틀로는 호두과자를 만들어낼 수 있듯이, 우리는 클래스로 객체를 찍어낼 수 있습니다. 클래스라는 틀만 한 번 만들어놓으면 말이죠. 

 

어떠한 클래스에 의해서 생성된 객체를 인스턴스(instance)라고도 부릅니다. 다만 어떤 경우에 객체라는 용어 대신에 인스턴스라는 용어를 사용하는가 하면, 클래스와 객체 사이의 관계성에 초점을 맞출 때입니다. 

 

자동차를 만들어주는 클래스가 있다고 가정하겠습니다. 

 

소나타는 객체입니다.

그랜저는 객체입니다.

모닝은 객체입니다.

레이는 객체입니다.

 

소나타는 자동차 클래스의 인스턴스입니다. 

그랜저는 자동차 클래스의 인스턴스입니다. 

모닝은 자동차 클래스의 인스턴스입니다. 

레이는 자동차 클래스의 인스턴스입니다. 

 

클래스 사용 예시

저는 사람이라는 클래스와 포켓몬이라는 클래스를 만든 후에 몇 명의 사람과 몇 마리의 포켓몬을 찍어내는 코드를 작성해봤습니다. 사람 클래스에는 자기소개 메서드(함수로 이해하셔도 괜찮습니다)와 포켓몬 수집 메서드를 포함시켜놨고, 포켓몬 클래스에는 자기소개 메서드와 공격 메서드를 포함시켜놨습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Person:
    def __init__(self, name):
        self.name = name
        
    def introduce(self):
        print("안녕! 나는 " + self.name + "야.")
    
    def catch(self, pokemon_name):
        print(pokemon_name + ", 넌 내거야~!\n")
 
class Pokemon:
    def __init__(self, name):
        self.name = name
        
    def introduce(self):
        print("얍! 나는 " + self.name + "!")
        
    def attack(self, pokemon_name):
        print(pokemon_name + ", 내 공격을 받아랏!\n")
    
 
p1 = Person("지우"# 객체 찍어내기
p2 = Person("이슬"# 객체 찍어내기
p3 = Person("웅"# 객체 찍어내기
 
p1.introduce()
p1.catch("피카츄")
 
p2.introduce()
p2.catch("고라파덕")
 
p3.introduce()
p3.catch("마자용")
 
m1 = Pokemon("이상해씨"# 객체 찍어내기
m2 = Pokemon("리자몽"# 객체 찍어내기
m3 = Pokemon("모래두지"# 객체 찍어내기
 
m1.introduce()
m1.attack("또또가스")
 
m2.introduce()
m2.attack("야도란")
 
m3.introduce()
m3.attack("나옹")
cs

 

실행결과 다음과 같은 내용이 출력되었습니다. 

 

 

클래스라는 틀에 의해 세 명의 사람과 세 마리의 포켓몬이 잘 찍어내졌음을 확인하실 수 있을 것입니다. 

 

지우는 객체입니다.

이슬이는 객체입니다.

웅이는 객체입니다.

이상해씨는 객체입니다.

리자몽은 객체입니다.

모래두지는 객체입니다.

 

지우는 사람 클래스의 인스턴스입니다.

이슬이는 사람 클래스의 인스턴스입니다.

웅이는 사람 클래스의 인스턴스입니다.

이상해씨는 포켓몬 클래스의 인스턴스입니다.

리자몽은 포켓몬 클래스의 인스턴스입니다.

모래두지는 포켓몬 클래스의 인스턴스입니다.