IT

파이썬 클래스(Class) 정의

carnival6103 2025. 2. 5. 22:02
반응형

파이썬에서 클래스는 객체 지향 프로그래밍(OOP)을 구현하는 데 사용되는 기본적인 구조입니다. 클래스를 사용하면 데이터와 기능을 하나의 단위로 묶어 관리할 수 있습니다. 클래스는 객체의 청사진(blueprint) 역할을 하며, 객체는 클래스의 인스턴스(instance)입니다.

클래스 정의

클래스를 정의하려면 class 키워드를 사용합니다. 클래스 내부에는 속성(변수)과 메서드(함수)를 정의할 수 있습니다.

class Dog:
    # 클래스 속성
    species = "Canis familiaris"

    # 초기화 메서드 (생성자)
    def __init__(self, name, age):
        self.name = name  # 인스턴스 속성
        self.age = age    # 인스턴스 속성

    # 메서드
    def bark(self):
        return f"{self.name}이(가) 짖습니다."

    def get_age(self):
        return f"{self.name}은(는) {self.age}살입니다."

객체 생성

클래스를 정의한 후에는 객체를 생성할 수 있습니다. 객체를 생성하려면 클래스 이름을 함수처럼 호출합니다.

my_dog = Dog("바둑이", 3)
print(my_dog.bark())  # 출력: 바둑이이(가) 짖습니다.
print(my_dog.get_age())  # 출력: 바둑이는(는) 3살입니다.

클래스 속성과 인스턴스 속성

  • 클래스 속성: 모든 인스턴스가 공유하는 속성입니다. 예를 들어, species는 모든 Dog 객체가 공유하는 속성입니다.
  • 인스턴스 속성: 각 인스턴스마다 고유한 속성입니다. 예를 들어, name과 age는 각 Dog 객체마다 다를 수 있습니다.

메서드

메서드는 클래스 내부에 정의된 함수입니다. 메서드는 첫 번째 매개변수로 항상 self를 받습니다. self는 현재 인스턴스를 가리킵니다.

class Dog:
    # 초기화 메서드 (생성자)
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 메서드
    def bark(self):
        return f"{self.name}이(가) 짖습니다."

    def get_age(self):
        return f"{self.name}은(는) {self.age}살입니다."

상속

클래스는 다른 클래스에서 상속받을 수 있습니다. 상속을 통해 기존 클래스를 확장하거나 수정할 수 있습니다.

class Bulldog(Dog):
    def __init__(self, name, age, weight):
        super().__init__(name, age)  # 부모 클래스의 초기화 메서드 호출
        self.weight = weight

    def get_weight(self):
        return f"{self.name}은(는) {self.weight}kg입니다."
my_bulldog = Bulldog("뭉치", 5, 20)
print(my_bulldog.bark())  # 출력: 뭉치이(가) 짖습니다.
print(my_bulldog.get_age())  # 출력: 뭉치는(는) 5살입니다.
print(my_bulldog.get_weight())  # 출력: 뭉치는(는) 20kg입니다.

 

 

클래스의 추가 예제를 몇 가지 더 보여드릴게요.

예시 1: 학생 클래스

class Student:
    def __init__(self, name, student_id, major):
        self.name = name
        self.student_id = student_id
        self.major = major

    def introduce(self):
        return f"안녕하세요, 저는 {self.name}입니다. 학번은 {self.student_id}이고, 전공은 {self.major}입니다."

    def change_major(self, new_major):
        self.major = new_major
        return f"{self.name}의 전공이 {self.major}(으)로 변경되었습니다."

# 객체 생성
student1 = Student("홍길동", "20250001", "컴퓨터공학")
print(student1.introduce())  # 출력: 안녕하세요, 저는 홍길동입니다. 학번은 20250001이고, 전공은 컴퓨터공학입니다.
print(student1.change_major("전자공학"))  # 출력: 홍길동의 전공이 전자공학(으)로 변경되었습니다.

예시 2: 은행 계좌 클래스

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount
        return f"{amount}원이 입금되었습니다. 현재 잔액: {self.balance}원"

    def withdraw(self, amount):
        if amount > self.balance:
            return "잔액이 부족합니다."
        self.balance -= amount
        return f"{amount}원이 출금되었습니다. 현재 잔액: {self.balance}원"

# 객체 생성
account = BankAccount("김철수", 10000)
print(account.deposit(5000))  # 출력: 5000원이 입금되었습니다. 현재 잔액: 15000원
print(account.withdraw(2000))  # 출력: 2000원이 출금되었습니다. 현재 잔액: 13000원
print(account.withdraw(15000))  # 출력: 잔액이 부족합니다.

예시 3: 도서관 시스템 클래스

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
        self.is_checked_out = False

    def check_out(self):
        if self.is_checked_out:
            return f"{self.title}은(는) 이미 대출 중입니다."
        self.is_checked_out = True
        return f"{self.title}이(가) 대출되었습니다."

    def return_book(self):
        if not self.is_checked_out:
            return f"{self.title}은(는) 대출되지 않았습니다."
        self.is_checked_out = False
        return f"{self.title}이(가) 반납되었습니다."

# 객체 생성
book1 = Book("파이썬 프로그래밍", "홍길동")
print(book1.check_out())  # 출력: 파이썬 프로그래밍이(가) 대출되었습니다.
print(book1.check_out())  # 출력: 파이썬 프로그래밍은(는) 이미 대출 중입니다.
print(book1.return_book())  # 출력: 파이썬 프로그래밍이(가) 반납되었습니다.
print(book1.return_book())  # 출력: 파이썬 프로그래밍은(는) 대출되지 않았습니다.

이 예제들이 도움이 되었길 바랍니다! 

반응형