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

[Python] (수정 필요)Week 17: 객체지향 프로그래밍 - 클래스와 객체

by cogito21_python 2024. 6. 1.
반응형

Day 1: 클래스의 기본 개념

  • 강의 내용:
    • 클래스의 정의와 필요성
      • 클래스와 객체의 개념
      • 객체지향 프로그래밍의 장점
    • 클래스 정의
      • 클래스 정의 문법
      • 객체 생성 및 사용
  • 실습:
    • 기본 클래스 정의 및 객체 생성 예제 작성
# 클래스 정의
class Person:
    pass

# 객체 생성
person1 = Person()
person2 = Person()

print(person1)  # <__main__.Person object at 0x...>
print(person2)  # <__main__.Person object at 0x...>

 

Day 2: 인스턴스 변수와 메서드

  • 강의 내용:
    • 인스턴스 변수
      • 인스턴스 변수의 정의와 사용
      • 인스턴스 변수 초기화
    • 인스턴스 메서드
      • 인스턴스 메서드 정의
      • 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 3: 클래스 변수와 메서드

  • 강의 내용:
    • 클래스 변수
      • 클래스 변수의 정의와 사용
      • 클래스 변수와 인스턴스 변수의 차이
    • 클래스 메서드
      • 클래스 메서드 정의
      • @classmethod 데코레이터
  • 실습:
    • 클래스 변수와 메서드를 사용한 클래스 예제 작성
# 클래스 정의
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 4: 상속과 다형성

  • 강의 내용:
    • 상속의 개념
      • 상속의 정의와 필요성
      • 부모 클래스와 자식 클래스
    • 다형성
      • 메서드 오버라이딩
      • 다형성의 개념과 사용
  • 실습:
    • 상속과 다형성을 사용한 클래스 예제 작성
# 부모 클래스 정의
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

# 자식 클래스 정의
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

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

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

 

Day 5: 다중 상속

  • 강의 내용:
    • 다중 상속의 개념
      • 다중 상속의 정의와 사용
      • 다중 상속의 장단점
    • 다중 상속 사용 예제
  • 실습:
    • 다중 상속을 사용한 클래스 예제 작성
# 부모 클래스 정의
class Flyer:
    def fly(self):
        return "Flying high in the sky!"

class Swimmer:
    def swim(self):
        return "Swimming deep in the sea!"

# 자식 클래스 정의 (다중 상속)
class FlyingFish(Flyer, Swimmer):
    pass

# 객체 생성 및 사용
flying_fish = FlyingFish()
print(flying_fish.fly())  # 'Flying high in the sky!'
print(flying_fish.swim())  # 'Swimming deep in the sea!'

 

Day 6: 특수 메서드와 연산자 오버로딩

  • 강의 내용:
    • 특수 메서드의 개념
      • 특수 메서드의 정의와 사용
      • __str__, __repr__, __add__ 등
    • 연산자 오버로딩
      • 연산자 오버로딩의 개념과 사용
      • 특수 메서드를 사용한 연산자 오버로딩
  • 실습:
    • 특수 메서드와 연산자 오버로딩 예제 작성
# 클래스 정의
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

# 객체 생성 및 사용
v1 = Vector(2, 3)
v2 = Vector(4, 5)

print(v1)  # 'Vector(2, 3)'
print(v2)  # 'Vector(4, 5)'

v3 = v1 + v2
print(v3)  # 'Vector(6, 8)'

 

Day 7: 객체지향 프로그래밍 종합 연습 및 프로젝트

  • 강의 내용:
    • 객체지향 프로그래밍 종합 연습 문제 풀이
      • 다양한 클래스와 객체 관련 문제
      • Q&A 세션
    • 미니 프로젝트
      • 주제 선정 및 프로그램 설계
      • 객체지향 프로그래밍을 활용한 프로그램 구현 및 테스트
  • 실습:
    • 종합 연습 문제 풀기
    • 미니 프로젝트 작성 및 발표
# 연습 문제 1: 간단한 학생 관리 클래스 작성
class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def __str__(self):
        return f"Student({self.name}, {self.grade})"

student1 = Student("Alice", "A")
student2 = Student("Bob", "B")
print(student1)  # 'Student(Alice, A)'
print(student2)  # 'Student(Bob, B)'

# 연습 문제 2: 은행 계좌 클래스 작성 (입금, 출금 메서드 포함)
class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

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

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

account = BankAccount("Alice")
account.deposit(1000)
account.withdraw(500)
account.withdraw(1000)

# 미니 프로젝트 예제: 도서 관리 시스템
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):
        return f"Book({self.title}, {self.author})"

class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        self.books.append(book)
        print(f"{book.title} by {book.author}이(가) 도서관에 추가되었습니다.")

    def remove_book(self, book):
        if book in self.books:
            self.books.remove(book)
            print(f"{book.title} by {book.author}이(가) 도서관에서 제거되었습니다.")
        else:
            print("도서를 찾을 수 없습니다.")

    def list_books(self):
        for book in self.books:
            print(book

 

 

반응형