반응형
개요
함수가 특정 기능을 수행하는 코드의 묶음이라면, 클래스는 데이터와 그 데이터를 처리하는 함수를 하나로 묶어 관리하는 설계도다.
1. 클래스의 정의와 인스턴스화
클래스는 객체를 만들기 위한 틀이다. 붕어빵 틀(클래스)에서 만들어진 붕어빵(객체)에 비유할 수 있다.
클래스 선언 및 객체 생성
# 클래스 정의
class Smartphone:
def __init__(self, model, color):
self.model = model # 속성(Attribute)
self.color = color
# 객체(인스턴스) 생성
my_phone = Smartphone("iPhone 15", "Blue")
print(my_phone.model) # 출력: iPhone 152. 생성자 함수 (init)
객체가 생성될 때 자동으로 호출되는 특수 함수를 생성자라고 한다. 객체의 초기 상태를 설정하는 역할을 수행한다.
self의 역할
self는 클래스 내부에서 '현재 생성된 객체 자신'을 가리키는 변수다. 이를 통해 객체마다 서로 다른 속성값을 유지할 수 있다.
3. 클래스 내부의 함수(Method)
클래스 안에서 정의된 함수를 메서드라고 부른다. 해당 객체가 수행할 수 있는 동작을 정의한다.
class Smartphone:
def __init__(self, model):
self.model = model
self.power = False
def toggle_power(self):
# 현재 전원 상태를 반전시킴
self.power = not self.power
# 기존에 배운 if-else 문을 활용한 상태 판별
if self.power:
status = "켜짐"
else:
status = "꺼짐"
print(f"{self.model}의 전원이 {status} 상태입니다.")
my_phone = Smartphone("Galaxy S24")
my_phone.toggle_power() # 출력: Galaxy S24의 전원이 켜짐 상태입니다.4. 주의사항 (Precautions)
클래스를 작성할 때 입문자가 가장 많이 하는 실수와 파이썬의 독특한 특성을 바탕으로 주의할 점을 살펴본다.
속성의 자료형 유연성과 동적 타이핑
파이썬 클래스는 속성의 자료형을 미리 선언하지 않는다. 생성 시 전달되는 데이터에 따라 타입이 결정되므로 의도치 않은 자료형이 입력되지 않도록 주의해야 한다.
# 잘못된 예시: 문자열을 기대했으나 정수를 입력한 경우
# faulty_phone = Smartphone(12345, 67890)
# 올바른 예시: 의도한 자료형(문자열)으로 입력
correct_phone = Smartphone("iPhone 15", "Black")self 매개변수 누락
클래스 메서드의 첫 번째 매개변수는 반드시 self여야 한다. 이를 누락하면 메서드 호출 시 오류가 발생한다.
# 잘못된 예시: self 누락
# def say_hi():
# print("Hi")
# 올바른 예시: self 포함
def say_hi(self):
print("Hi")💡 활용 팁
- 변수 캡슐화: 데이터는 클래스 내부 속성으로 관리하고, 외부에서는 메서드를 통해서만 데이터에 접근하게 설계하는 것이 바람직하다.
- 재사용성 극대화: 동일한 구조의 객체가 여러 개 필요할 때 클래스를 활용하면 코드 중복을 획기적으로 줄일 수 있다.
- 명확한 명명 규칙: 클래스 이름은 대문자로 시작하는 PascalCase를 사용하는 것이 파이썬의 관례다.
- 약어 사용 금지: 클래스명이나 메서드명을 지을 때 의미를 알 수 없는 약어 대신 명확한 풀네임을 사용하는 습관을 들인다.
반응형
'Dev > Python' 카테고리의 다른 글
| 파이썬 기초: 모듈(Module)과 패키지(Package)의 활용 (0) | 2026.01.12 |
|---|---|
| 파이썬 기초: 예외 처리(try-except) 구조 및 주요 내장 예외 활용 (0) | 2026.01.05 |
| 파이썬 기초: 함수(Function)의 정의와 활용 (0) | 2026.01.02 |
| 파이썬 기초: 자료형 심화 (리스트와 데이터 관리) (0) | 2026.01.01 |
| 파이썬 기초: 반복문(for, while) (0) | 2025.12.31 |