본문 바로가기
-----ETC2-----/Python

[Python] Week 18: 객체지향 프로그래밍 - 메서드

by cogito21_python 2024. 6. 1.
반응형

Day 1: 인스턴스 메서드

  • 강의 내용:
    • 인스턴스 메서드의 개념
      • 인스턴스 메서드 정의
      • self 키워드의 의미
    • 인스턴스 메서드 작성 및 호출
      • 인스턴스 메서드 작성 방법
      • 인스턴스 메서드 호출
  • 실습:
    • 인스턴스 메서드를 사용하는 클래스 예제 작성
# 클래스 정의
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

# 객체 생성 및 사용
person1 = Person("Alice", 30)
person1.greet()  # 'Hello, my name is Alice and I am 30 years old.'

person2 = Person("Bob", 25)
person2.greet()  # 'Hello, my name is Bob and I am 25 years old.'

 

Day 2: 클래스 메서드

  • 강의 내용:
    • 클래스 메서드의 개념
      • 클래스 메서드 정의
      • @classmethod 데코레이터
      • cls 키워드의 의미
    • 클래스 메서드 작성 및 호출
      • 클래스 메서드 작성 방법
      • 클래스 메서드 호출
  • 실습:
    • 클래스 메서드를 사용하는 클래스 예제 작성
# 클래스 정의
class Person:
    species = "Homo sapiens"  # 클래스 변수

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

    @classmethod
    def describe_species(cls):
        print(f"Humans are {cls.species}.")

# 객체 생성 및 사용
person1 = Person("Alice", 30)
person1.greet()  # 'Hello, my name is Alice and I am 30 years old.'

person2 = Person("Bob", 25)
person2.greet()  # 'Hello, my name is Bob and I am 25 years old.'

# 클래스 메서드 호출
Person.describe_species()  # 'Humans are Homo sapiens.'

 

Day 3: 정적 메서드

  • 강의 내용:
    • 정적 메서드의 개념
      • 정적 메서드 정의
      • @staticmethod 데코레이터
    • 정적 메서드 작성 및 호출
      • 정적 메서드 작성 방법
      • 정적 메서드 호출
  • 실습:
    • 정적 메서드를 사용하는 클래스 예제 작성
# 클래스 정의
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

    @staticmethod
    def subtract(a, b):
        return a - b

# 정적 메서드 호출
print(MathUtils.add(10, 5))      # 15
print(MathUtils.subtract(10, 5)) # 5

 

Day 4: 메서드 오버라이딩

  • 강의 내용:
    • 메서드 오버라이딩의 개념
      • 메서드 오버라이딩 정의
      • 부모 클래스와 자식 클래스의 메서드
    • 메서드 오버라이딩 사용 예제
  • 실습:
    • 메서드 오버라이딩을 사용하는 클래스 예제 작성
# 부모 클래스 정의
class Animal:
    def speak(self):
        return "Some sound"

# 자식 클래스 정의
class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# 객체 생성 및 사용
dog = Dog()
cat = Cat()

print(dog.speak())  # 'Woof!'
print(cat.speak())  # 'Meow!'

 

Day 5: 메서드 체이닝

  • 강의 내용:
    • 메서드 체이닝의 개념
      • 메서드 체이닝 정의
      • 메서드 체이닝의 장점
    • 메서드 체이닝 구현
      • self 반환을 통한 체이닝 구현
  • 실습:
    • 메서드 체이닝을 사용하는 클래스 예제 작성
# 클래스 정의
class Person:
    def __init__(self, name):
        self.name = name

    def set_age(self, age):
        self.age = age
        return self

    def set_city(self, city):
        self.city = city
        return self

    def display_info(self):
        print(f"Name: {self.name}, Age: {self.age}, City: {self.city}")
        return self

# 메서드 체이닝 사용
person = Person("Alice").set_age(30).set_city("New York").display_info()

 

Day 6: 메서드 데코레이터

  • 강의 내용:
    • 메서드 데코레이터의 개념
      • 데코레이터의 정의와 사용
      • @property 데코레이터
      • @classmethod, @staticmethod 데코레이터 복습
    • @property 데코레이터
      • 게터와 세터 메서드 정의
  • 실습:
    • @property 데코레이터를 사용하는 클래스 예제 작성
# 클래스 정의
class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

# 객체 생성 및 사용
person = Person("Alice", 30)
print(person.name)  # 'Alice'
print(person.age)   # 30

person.name = "Bob"
person.age = 25
print(person.name)  # 'Bob'
print(person.age)   # 25

try:
    person.age = -5
except ValueError as e:
    print(e)  # 'Age cannot be negative'

 

Day 7: 메서드 종합 연습 및 프로젝트

  • 강의 내용:
    • 메서드 종합 연습 문제 풀이
      • 다양한 메서드 관련 문제
      • Q&A 세션
    • 미니 프로젝트
      • 주제 선정 및 프로그램 설계
      • 메서드를 활용한 프로그램 구현 및 테스트
  • 실습:
    • 종합 연습 문제 풀기
    • 미니 프로젝트 작성 및 발표
# 연습 문제 1: 도형 클래스를 작성하고, 면적과 둘레를 계산하는 메서드 추가
class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

rect = Rectangle(4, 5)
print(f"Area: {rect.area()}")        # Area: 20
print(f"Perimeter: {rect.perimeter()}")  # Perimeter: 18

# 연습 문제 2: 은행 계좌 클래스에 클래스 메서드를 추가하여 총 계좌 수를 관리
class BankAccount:
    account_count = 0

    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance
        BankAccount.account_count += 1

    def deposit(self, amount):
        self.balance += amount

    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            print("Insufficient funds")

    @classmethod
    def total_accounts(cls):
        return cls.account_count

account1 = BankAccount("Alice")
account2 = BankAccount("Bob")
print(BankAccount.total_accounts())  # 2

# 미니 프로젝트 예제: 재고 관리 시스템
class Product:
    def __init__(self, name, price, quantity):
        self.name = name
        self.price = price
        self.quantity = quantity

    def update_quantity(self, amount):
        self.quantity += amount
        return self

    def update_price(self, new_price):
        self.price = new_price
        return self

    def display_info(self):
        print(f"Product: {self.name}, Price: {self.price}, Quantity: {self.quantity}")
        return self

# 제품 생성 및 메서드 체이닝 사용
product = Product("Laptop", 1500, 10)
product.update_quantity(5).update_price(1400).display_info()

 

이 강의는 파이썬의 객체지향 프로그래밍에서 메서드를 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

반응형