목차
1. 클래스(Class)와 객체(Object)
2. 사칙연산 클래스 만들기
2-1 self란 무엇인가
2-2 객체 변수
2-3 발생할 수 있는 오류
3. 생성자(Constructor)
4. 클래스의 상속(Inheritance)
5. 메서드 오버라이딩(Method overriding)
1. 클래스(Class)와 객체(object)
파이썬은 객체 지향 프로그래밍 언어(Object Oriented Programming)로, 데이터를 객체 형태로 메모리에 저장한다.
클래스(Class)란 객체 생성자로, 객체를 만드는 '설계도' 역할을 한다.
즉, 객체가 가져야 할 데이터(변수), 기능(함수)을 정의하는 구조이다.
객체(Object)란 클래스를 이용해 생성된 실제 데이터이다.
예를 들어, 클래스가 붕어빵 틀이라면 객체가 붕어빵을 의미한다.
클래스는 같은 객체를 계속 만들어 낼 수 있는 설계도이고, 객체는 그 설계도로 만들어진 결과물이다.
클래스는 class 키워드로 생성할 수 있다.
보통 클래스의 이름은 대문자로 시작하는 것이 관례이다.
이는 파이썬 공식 스타일 가이드(PEP8)에서 권장하는 규칙이다.
예시 - 클래스 생성
class Bread:
pass
예시 - 객체 생성
b1 = Bread()
print(type(b1))
출력 결과
<class '__main__.Bread'>
여기서 __main__ 은 현재 실행 중인 파일을 의미한다.
즉, 위 출력은 '현재 프로그램에서 정의된 Bread 클래스 객체'라는 의미이다.
2. 사칙연산 클래스 만들기
두 숫자를 이용해 사칙연산을 수행하는 클래스를 만들기 위해서는 '데이터'와 '메서드'가 정의되어야 한다.
이때 메서드(Method)란 클래스 안에 정의된 함수를 의미한다.
예시 - 사칙연산 클래스
class FourCal:
def setData(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
def sub(self):
return self.first - self.second
def mul(self):
return self.first * self.second
def div(self):
return self.first / self.second
예시 - 객체 생성
a = FourCal()
a.setData(4, 2)
print(a.add())
print(a.mul())
출력 결과
6
8
2-1 self란 무엇인가
클래스에서 메서드를 정의할 때 첫 번째 매개변수로 self를 사용한다.
def add(self):
self란 메서드를 호출한 객체 자신을 의미한다.
예를 들어, a.add()는 내부적으로 다음과 같이 동작한다.
FourCal.add(a)
객체지향 프로그래밍에서는 하나의 클래스로 여러 개의 객체를 만들 수 있다.
예시 - 두 개의 객체 생성
a = FourCal()
b = FourCal()
a.setData(4, 2)
b.setData(10, 5)
이 경우 객체의 데이터는 다음과 같이 저장된다.
a.first = 4
a.second = 2
b.first = 10
b.second = 5
즉, 각 객체는 서로 다른 데이터를 가진다.
이때 파이썬은 어떤 객체의 데이터를 사용할지 구분해야 한다.
이 역할을 하는 것이 바로 self이다.
2-2 객체 변수
self.first = first
- self.first : 객체에 저장되는 변수
- first : 함수의 매개변수
즉, 객체 안에 값을 저장하는 과정이다.
2-3 발생할 수 있는 오류
만약 setData를 호출하지 않고 add를 실행하면 AttributeError 오류가 발생한다.
이는 객체 변수 first, second가 생성되지 않았기 때문이다.
예시 - AttributeError 발생 예시
a = FourCal()
a.add()
setData() 메서드를 실행해야 객체 변수 first와 second가 생성된다.
하지만 해당 메서드를 호출하지 않으면 객체에 이 변수들이 존재하지 않기 때문에 AttributeError가 발생한다.
3. 생성자(Constructor)
이 문제를 해결하기 위해 사용하는 것이 생성자(Constructor)이다.
생성자는 객체가 생성될 때 자동으로 호출되는 메서드이다.
파이썬에서는 magic method라고 불리는 특별한 메서드를 사용한다.
생성자는 다음 이름을 사용한다.
__init__()
예시 - 생성자 사용
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
예시 - 객체 생성
a = FourCal(4,2)
print(a.add())
출력 결과
6
즉, 생성자를 사용하여, setData()를 호출하지 않아도 메서드를 사용할 수 있다.
객체 생성 시 초기값이 자동으로 설정되기 때문이다.
4. 클래스의 상속(Inheritance)
상속(Inheritance)은 기존 클래스의 기능을 그대로 물려받는 것을 의미한다.
상속을 사용하면 기존 클래스의 기능을 그대로 사용할 수 있으며, 필요한 기능만 추가하거나 수정할 수 있다.
상속 문법은 아래와 같다.
class 클래스이름(부모클래스):
예시 - 상속할 부모 클래스
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
예시 - 상속한 새로운 클래스
class MoreFourCal(FourCal):
def pow(self):
return self.first ** self.second
예시
a = MoreFourCal(4,2)
print(a.add())
print(a.pow())
즉, MoreFourCal은 FourCal의 기능을 그대로 사용할 수 있다.
5. 메서드 오버라이딩(Method overriding)
메서드 오버라이딩(Method overriding)은 부모 클래스의 메서드를 다시 정의하는 것(재정의하는 것)을 의미한다.
즉, 같은 이름의 메서드를 자식 클래스에서 새롭게 구현하는 것이다.
이때 수정하는 것은 처리부분이다. 선언부, 이름, 매개변수는 수정하지 않는다.
예시
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
return self.first / self.second
a = SafeFourCal(4,0)
print(a.div())
출력 결과
0
기존 FourCal 클래스에서는 ZeroDivisionError가 발생했지만, SafeFourCal에서는 오류가 발생하지 않는다.
이처럼 부모 클래스의 메서드를 다시 정의하는 것을 메서드 오버라이딩이라고 한다.
요약
- 클래스는 객체를 만들기 위한 설계도이다.
- 객체는 클래스로 만든 실제 데이터이다.
- self는 메서드를 호출한 객체 자신을 의미한다.
- __init__은 객체 생성 시 자동으로 실행되는 생성자이다.
- 상속을 이용하면 기존 클래스 기능을 재사용할 수 있다.
- 오버라이딩을 통해 부모 메서드를 재정의할 수 있다.
👉 매직 메서드(Magic Method)
👉 PEP 8 – Style Guide for Python Code
'Python' 카테고리의 다른 글
| 파이썬 기초 11편 | 표준 라이브러리(Standard Library) 정리 (1) | 2026.03.09 |
|---|---|
| 파이썬 기초 10편 | 모듈과 패키지 완벽 정리 (import / __name__ 설명) (0) | 2026.03.09 |
| 파이썬 기초 8편 | 예외 처리 (0) | 2026.03.07 |
| 파이썬 기초 7편 | 사용자 입출력과 파일 읽고 쓰기 (0) | 2026.03.07 |
| 파이썬 기초 6편 | 내장함수 완전 정리 (abs, map, filter, sorted 등) (1) | 2026.03.06 |