클래스 정의 - 파이썬 기본 문법
파이썬 문법을 학습하기 위한 정보는 아래 url을 기반한다.
https://docs.python.org/ko/3.13/tutorial/index.html
The Python Tutorial
Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax an...
docs.python.org
고양이 class 예제

class 키워드
클래스를 정의하기 위해서 아래와 같이 class 키워드 옆에 클래스 이름을 적고 콜론(:) 을 쓴다.
| Syntax | Example | |
| class ClassName: <statement-1> . ... . <statement-N> |
class Cat: ... ... |
Cat 클래스 정의를 시작한다 |
생성자 (__init__ 메서드)
객체 생성 시 호출되어 속성을 초기화한다. __init__ 메서드의 첫 번째 매개변수는 self이며, 생성하는 인스턴스 자신을 의미한다. 그 외에 클래스 attribute의 초기값을 입력받아 생성하는 인스턴스의 속성값으로 할당한다.
| Syntax | Example |
| def __init__(self, arg1, ..): |
def __init__(self, name, color, size, gender, breed): |
| - name, color, size, gender, breed를 입력 파라메터로 받는 생성자를 정의한다. - 첫번째 파라메터인 self는 호출자가 넘겨주는 것이 아니라, Python이 자동으로 생성한 객체 자신을 가리키는 역할을 합니다. |
[참고] __init__ 매서드는 예제로 정의된 Cat 클래스를 아래와 같이 사용할때, 1번라인의 Cat( ) 클래스가 호출될때 실행된다.
속성(Attributes)
클래스 내부에 정의된 변수로 객체의 데이터를 저장한다. 속성은 데이타의 범위에 따라 인스턴스 속성과 클래스 속성으로 구분한다.
- 인스턴스 속성: 인스턴스마다 고유값을 가진다. 주로 생성자 __init__( ) 메서드 내에서 self를 인자로 받아 값을 할당하면서 정의한다.
- 클래스 속성: 클래스 수준에서 가지는 값으로 모든 객체(인스턴스)가 같은 값을 공유한다. 클래스 정의 바로 아래에 일반적인 변수를 선언하고 초기화 하듯이 사용한다.
아래 예에서 Cat 클래스는 species라는 클래스 속성에 "Feline"(고양이과) 라는 값을 할당받아 생성되는 모든 고양이 인스턴스에 speicies는 "Feline" 값을 가지게 된다. 그러나 name, color..., breed 같은 속성은 인스턴스 속성으로 생성되는 고양이 인스턴스마다 해당 인스턴스의 값을 가지게 된다.

메서드(Methods)
클래스 내부에 정의된 함수로 객체의 동작(Behavior)을 정의한다. 파이썬에서 메서드는 인스턴스 메서드, 클래스 메서드, 정적 메서드로 세분화 된다.
| 메서드 종류 | 내용 | 파이썬 데코레이터 사용 |
파이썬에서 넘겨주는 파라메터 |
| 인스턴스 메서드 | 인스턴스 수준의 속성을 핸들링한다. | 사용하지 않음 | self |
| 클래스 메서드 | 클래스 수준의 속성을 핸들링한다. | @classmethod | cls |
| 정적 메서드 | 클래스의 속성을 핸들링 하지 않고, 입력 파라메터로만 기능을 수행하면 유틸리티성 기능을 구현할때 사용한다. | @staticmethod | 넘겨주지 않음 |
| Syntax | Example | |
| @decoratorname def methodName(arg1, ..): |
def meow(self): print("Meow!") |
- meow ()라는 인스턴스 메서드를 정의한다. - self는 인스턴스 메서드이므로 첫번째 파라메터로 정의한다. |
| @classmethod def get_species( cls): return cls.species |
- 클래스메서드로 @classmethod 데코레이터를 써준다. - cls를 기본 입력파라메터로 사용한다. |
|
| @staticmethod def is_cat_older(arg1, arg2) |
- 정적 메서드로 @staticmethod 데코레이터를 써준다. - 클래스에 정의된 속성을 메서드 내부에서 사용하지 않고, 입력 파라메터로 기능을 정의한다. - is_cat_older는 입력받은 두 나이를 비교해서 많은 나이를 리턴한다. |
|
객체 생성 및 사용
객체를 정의하면 이 객체의 데이타를 사용하거나 메소드의 기능을 사용할 수 있다. 아래 코드는 객체를 생성해서 데이타를 사용하고 메서드를 호출하는 예제이다.

24 라인이 실행되면,
- Cat 클래스의 인스턴스 하나가 메모리에 생성되면서 생성자 __init__ 매서드가 호출되고,
- 생성자 __init__( ) 매서드가 실행되면서, 매개변수(parameter)에 입력한 인수(argument)값들이 새로 만들어진 인스턴스 속성에 초기값으로 할당된 후,
- 새로 만들어진 인스턴스는 my_cat 변수에 할당된다.
이 후로 코드에서 my_cat으로 생성된 인스턴스의 데이타를 사용하거나 매서드를 실행시킬 수 있다.
27라인, 28라인은 데이타를 출력하고, 31라인~34라인은 매서드를 실행시키는 코드이다.
여기서 '.' notation을 보자. my_cat.name 또는 my_cat.meow( )의 점(.) 은 코드를 '~의' 로 해석하면 된다. 즉 'my_cat.name' 은 'my_cat 객체의 name 속성' 으로 'my_cat.meow( )' 는 'my_cat 객체의 meow( ) 매서드' 이다. 속성은 데이타를 리턴하여 27라인의 결과는 "Cookie"가 출력되고, 매서드 호출은 해당 매서드가 실행되어 "The cat, Cookie, meows softly!" 가 출력된다.
[참고] print(f"....") f는 문자열 포맷팅 방식으로, 문자열 리터럴 안에서 중괄호 {}를 사용하여 변수나 표현식을 삽입할 수 있는 문법이다.
고양이 클래스 예제 코드
class Cat:
species = "Feline" #종: 고양이과
def __init__(self, name, color, size, gender, breed):
# 인스턴스 속성 및 초기화 (인스턴스마다 고유의 값)
self.name = name # 색깔
self.color = color # 색깔
self.size = size # 크기
self.gender = gender # 성별
self.breed = breed # 품종
@classmethod
def get_species(cls):
return cls.species
@staticmethod
def is_cat_older(age1, age2):
"""두 고양이의 나이를 비교하는 정적 메서드"""
if age1 > age2:
return "첫 번째 고양이가 더 나이 많습니다."
elif age1 < age2:
return "두 번째 고양이가 더 나이 많습니다."
else:
return "두 고양이는 같은 나이입니다."
def meow(self):
print(f"The cat, {self.name}, meows softly!")
# 객체 생성
my_cat = Cat(name="Cat1", color="orange", size= 'middle', gender='male', breed='Domestic short hair')
# 인스턴스 속성 접근
print(my_cat.name)
print(my_cat.breed)
# 인스턴스 매서드 실행
my_cat.meow()
# 여러 객체 생성
my_cat_1 = Cat(name="Cat2", color="Darkbrow/white", size= 'middle', gender='female', breed='Domestic Short hair')
my_cat_2 = Cat(name="Cookie", color="orange", size= 'middle', gender='male', breed='Domestic short hair')
my_cat_3 = Cat(name="Bombie", color="Chaos", size= 'middle', gender='female', breed='Domestic short hair')
# 인스턴스 매서드 실행
my_cat_1.meow()
my_cat_2.meow()
my_cat_3.meow()
#클래스 매서드 실행
print(f"The species of {my_cat.name} is {Cat.get_species()}!")
print(f"The species of {my_cat_1.name} is {my_cat_1.get_species()}!")
print(f"The species of {my_cat_2.name} is {my_cat_2.get_species()}!")
print(f"The species of {my_cat_3.name} is {my_cat_3.get_species()}!")
#정적 매서드 실행
print(f"The result of "'"Cat.is_cat_older(3,6)"'" is {Cat.is_cat_older(3,6)}!")
실행결과

도서관 시스템에서 클래스 정의하기
아래는 도서관 시스템 정의될 수 있는 BookLoan 클래스의 모델이다. 아래 내용을 구현해 보자

- 도서대출 클래스를 정의하시오.
- 도서대출1,2,3 인스턴스를 생성하시오.
- 도서대출 클래스의 인스턴스 수를 리턴하는 클래스 속성과 메서드를 생성하시오 .
- 현재 생성된 인스턴스 수를 출력하시오.
코드
- 구현 포인트
- 인스턴스 수를 세는 속성을 클래스 속성으로 정의하고, 초기값을 0으로 세팅한다.
- 클래스의 인스턴스가 하나씩 생성될 때 마다 loan_count를 1씩 증가시키기 위해 __init__ 메소드에 증가시키는 로직을 넣는다.
- 인스턴스 메서드인 __init__메서드에서 클래스 속성인 loan_count를 사용할때는 클래스 속성임을 명시하기 위해 BookLoan.loan_count를 사용한다.
- 클래스 호출자가 인스턴스 수를 받아오기 위해 BookLoan 클래스에서는 getLoanCount(cls)라는 메서드를 클래스 메서드로 정의한다.
class Cat:
species = "Feline" #종: 고양이과
def __init__(self, name, color, size, gender, breed):
# 인스턴스 속성 및 초기화 (인스턴스마다 고유의 값)
self.name = name # 색깔
self.color = color # 색깔
self.size = size # 크기
self.gender = gender # 성별
self.breed = breed # 품종
@classmethod
def get_species(cls):
return cls.species
@staticmethod
def is_cat_older(age1, age2):
"""두 고양이의 나이를 비교하는 정적 메서드"""
if age1 > age2:
return "첫 번째 고양이가 더 나이 많습니다."
elif age1 < age2:
return "두 번째 고양이가 더 나이 많습니다."
else:
return "두 고양이는 같은 나이입니다."
def meow(self):
print(f"The cat, {self.name}, meows softly!")
# 객체 생성
my_cat = Cat(name="Cat1", color="orange", size= 'middle', gender='male', breed='Domestic short hair')
# 인스턴스 속성 접근
print(my_cat.name)
print(my_cat.breed)
# 인스턴스 매서드 실행
my_cat.meow()
# 여러 객체 생성
my_cat_1 = Cat(name="Cat2", color="Darkbrow/white", size= 'middle', gender='female', breed='Domestic Short hair')
my_cat_2 = Cat(name="Cookie", color="orange", size= 'middle', gender='male', breed='Domestic short hair')
my_cat_3 = Cat(name="Bombie", color="Chaos", size= 'middle', gender='female', breed='Domestic short hair')
# 인스턴스 매서드 실행
my_cat_1.meow()
my_cat_2.meow()
my_cat_3.meow()
#클래스 매서드 실행
print(f"The species of {my_cat.name} is {Cat.get_species()}!")
print(f"The species of {my_cat_1.name} is {my_cat_1.get_species()}!")
print(f"The species of {my_cat_2.name} is {my_cat_2.get_species()}!")
print(f"The species of {my_cat_3.name} is {my_cat_3.get_species()}!")
#정적 매서드 실행
print(f"The result of "'"Cat.is_cat_older(3,6)"'" is {Cat.is_cat_older(3,6)}!")
실행

'[2] 객체지향 프로그래밍 설계(파이썬) > 2주차. 객체와 클래스' 카테고리의 다른 글
| [2주차] 2.2 [실습] 파이썬으로 클래스 생성하기 (0) | 2026.03.12 |
|---|---|
| [2주차] 2.1 [개념] 객체와 클래스 이해하기 (0) | 2026.03.12 |












