클래스(Class) 는 객체를 표현하기 위한 문법입니다. 여기서 객체(Object) 란 특정한 개념이나 모양으로 존재하는 것을 말합니다.
예를 들어 현실 세계의 "사람"이라는 개념을 코드로 표현하면, 이름·나이 같은 속성(Attribute) 과 말하기·걷기 같은 메서드(Method) 를 가진 클래스가 됩니다. 이처럼 클래스로 프로그래밍하는 방식을 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 이라고 합니다.
클래스는 현실 세계의 개념뿐 아니라 컴퓨터 안에서만 쓰이는 개념(예: 파일, 소켓, 큐 등)도 표현할 수 있습니다.
class 키워드 뒤에 클래스 이름을 쓰고 : 콜론을 붙인 뒤, 들여쓰기해서 메서드를 작성합니다. 클래스 이름은 관례적으로 대문자로 시작합니다.
메서드는 함수 작성 방법과 같으며, 첫 번째 매개변수는 반드시 self 를 지정해야 합니다.
# 클래스 정의
class Person:
def greet(self):
print("안녕하세요!")
클래스는 개념을 표현만 할 뿐, 실제로 사용하려면 인스턴스(Instance) 를 생성해야 합니다.
# 인스턴스 생성
james = Person()
# 인스턴스를 통해 메서드 호출
james.greet() # 안녕하세요!
이처럼 인스턴스를 통해 호출하는 메서드를 인스턴스 메서드라고 부릅니다. 메서드는 반드시 클래스가 아닌 인스턴스를 통해 호출합니다.
💡 파이썬에서는
int,str,list같은 자료형도 모두 클래스입니다. 우리가 이미 클래스를 써오고 있었던 셈입니다.
__init__ 메서드클래스에서 속성을 만들 때는 __init__ 메서드 안에서 self.속성명 = 값 형태로 할당합니다.
__init__ 은 인스턴스를 생성할 때 파이썬이 자동으로 호출하는 초기화 메서드입니다. 이처럼 이름 앞뒤에 밑줄 두 개(__)가 붙은 메서드를 스페셜 메서드(Special Method) 또는 매직 메서드(Magic Method) 라고 부릅니다.
class Person:
def __init__(self, name, age): # 인스턴스 생성 시 자동 호출
self.name = name # 인스턴스 속성 초기화
self.age = age
def greet(self):
print(f"안녕하세요, 저는 {self.name}이고 {self.age}살입니다.")
# 인스턴스 생성 — __init__의 self 다음 매개변수에 순서대로 전달
james = Person("james", 25)
james.greet() # 안녕하세요, 저는 james이고 25살입니다.
self는 인스턴스 자기 자신을 의미합니다. 클래스 내부에서는 self.속성명, 클래스 바깥에서는 인스턴스.속성명으로 접근합니다. 이렇게 인스턴스를 통해 접근하는 속성을 인스턴스 속성이라고 부릅니다.
# 클래스 바깥에서 속성 접근
print(james.name) # james
print(james.age) # 25
속성 이름 앞에 밑줄 두 개(__)를 붙이면 비공개 속성(Private Attribute) 이 됩니다. 클래스 바깥에서 직접 접근할 수 없으며, 클래스 내부 메서드를 통해서만 접근할 수 있습니다.
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age # 비공개 속성
def get_age(self):
return self.__age # 클래스 내부에서는 접근 가능
james = Person("james", 25)
print(james.get_age()) # 25 — 메서드를 통해 접근
# print(james.__age) # AttributeError: 직접 접근 불가
지금까지 배운 클래스의 구성 요소를 표로 정리하면 다음과 같습니다.
| 개념 | 설명 | 예시 |
|---|---|---|
| 클래스 | 객체를 표현하는 틀 | class Person: |
| 인스턴스 | 클래스를 실제로 사용하는 객체 | james = Person() |
| 인스턴스 메서드 | 인스턴스를 통해 호출하는 함수 | james.greet() |
| 인스턴스 속성 | 인스턴스가 가진 데이터 | self.name |
__init__ | 인스턴스 초기화 메서드 | 생성 시 자동 호출 |
| 비공개 속성 | 클래스 외부에서 접근 불가 | self.__age |