참치코더의 꿈 메모장

Python / 클래스(Class) 정리 본문

파이썬

Python / 클래스(Class) 정리

참치깡 2026. 1. 10. 14:28
728x90

 

 

클래스(Class)

 

- 클래스는 객체(Object)를 만들기 위한 설계도다. 현실 세계의 사물을 코드로 표현할 때,

  속성(변수) -> 상태, 메서드(함수) -> 행동을 하나로 묶은 개념이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Person: # 클래스 선언
    def __init__(self, name, age): # 생성자(객체 생성 시 자동 실행), self: 자기 자신(객체) 참조
        self.name = name # 객체의 속성
        self.age = age
 
    def introduce(self):
        print(f"안녕하세요, 저는 {self.name}이고 {self.age}살입니다.")
 
 
# 객체 생성
 
p1 = Person("철수"20)
p1.introduce()
cs

 

self는 왜 필요할까?

 

- self는 객체 자기 자신을 가리키는 참조 변수다.

- self 덕분에 같은 클래스라도 다른 상태를 유지할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
class Student:
    school = "Python School" # 클래스 변수
 
    def __init__(self, name):
        self.name = name # 인스턴스 변수
 
s1 = Student("민수")
s2 = Student("지수")
 
print(s1.school) #Python School
print(s2.school) #Python School
cs

 

 

상속(Inheritance)이란?

 

- 기존 클래스를 재사용해서 새로운 클래스를 만드는 것

 

부모 클래스(기본 클래스) -> 자식 클래스(파생 클래스)

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
47
48
49
50
51
52
53
54
55
56
57
58
59
class Animal:
    def speak(self):
        print("소리를 냅니다.")
 
class Dog(Animal):
    def bark(self):
        print("멍멍!")
 
dog = Dog()
dog.speak() # 부모 클래스 메서드 사용
dog.bark() # 자식 클래스 메서드
 
# Dog 클래스는 Animal의 기능을 그대로 물려받음
 
# 메서드 오버라이딩 (Override)
# 부모 클래스의 메서드를 자식 클래스에서 재정의
 
class Animal:
    def speak(self):
        print("동물이 소리를 냅니다.")
 
class Cat(Animal)
    def speak(self):
        print("야옹")
 
cat = Cat()
cat.speak() # 야옹
 
# 같은 메서드 이름이라도 자식 클래스가 우선이다.
 
# super() - 부모 클래스 호출
# 부모 기능을 유지하면서 확장하고 싶을 때 사용
 
class Animal:
    def speak(self):
        print("동물 소리")
 
class Dog(Animal):
    def speak(self):
        super().speak()
        print("멍멍")
 
dog = Dog()
dog.speak() # 동물소리, 멍멍
 
# 생성자 상속
 
class Animal:
    def __init__(self, name):
        self.name = name
 
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
 
dog = Dog("초코""푸들")
 
# 부모 생성자는 자동으로 호출되지 않는다 -> super() 
cs

 

다형성(Polymorphism)

 

- 같은 메서드 이름이지만 객체에 따라 다른 동작을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Animal:
    def speak(self):
        pass
 
class Dog(Animal):
    def speak(self):
        print("멍멍")
 
class Cat(Animal):
    def speak(self):
        print("야옹")
 
animals = [Dog(), Cat()]
 
for a in animals:
    a.speak()
cs

 

상속을 사용할 때 주의점

 

- 단순 코드 재사용 목적으로 사용하면 안된다.

- 관계가 "is-a"가 아닐 때 사용하면 안된다.

 

좋은 상속 기준

 

- 공통 책임과 역할이 명확할 때 사용한다.

- 행위(메서드)를 공유할 때 사용한다.

728x90
Comments