1. 클래스와 객체를 쓰는 이유(필요성)
클래스와 객체의 필요성
•
코드의 재사용성: 클래스를 사용하면 동일한 구조를 가진 여러 객체를 생성할 수 있어 코드의 중복을 줄이고 재사용성을 높일 수 있습니다.
•
구조화된 데이터 관리: 클래스를 사용하면 관련 있는 데이터와 메소드를 하나의 논리적 단위로 묶어 관리할 수 있습니다.
•
유지보수 용이성: 클래스를 사용하면 코드를 모듈화하여 유지보수와 확장을 용이하게 합니다.
•
추상화: 클래스는 객체의 복잡한 내부 구현을 숨기고 단순한 인터페이스만을 제공하여 사용자에게 불필요한 정보를 숨길 수 있습니다.
class DGSW:
def __init__(self, name, age):
self.name = name
self.age = age
def userInfo(self):
print(f"{self.name}은 {self.age} 살 입니다.")
student1 = DGSW("신지윤", 18)
student2 = DGSW("이상은", 17)
student1.userInfo()
student2.userInfo()
Python
복사
2. 클래스의 구성요소
클래스의 주요 구성요소
•
클래스명: 클래스의 이름으로, 클래스의 고유 식별자입니다.
•
생성자 메소드: 객체가 생성될 때 호출되는 메소드로, 주로 __init__ 메소드를 사용합니다.
•
인스턴스 변수: 각 객체가 독립적으로 가지는 변수입니다.
•
메소드: 클래스 내에 정의된 함수로, 객체의 동작을 정의합니다.
•
클래스 변수: 클래스에 속한 변수로, 모든 객체가 공유합니다.
예제 코드:
class Car:
# 클래스 변수
wheels = 4
def __init__(self, brand, model):
# 인스턴스 변수
self.brand = brand
self.model = model
# 메소드
def drive(self):
print(f"{self.brand} {self.model} 가 달리고 있습니다!")
# 객체 생성
car1 = Car("현대", "소나타")
car2 = Car("기아", "카니발")
car1.drive()
car2.drive()
# 클래스 변수 접근
print(f"{Car.wheels}개의 타이어가 있습니다!")
Python
복사
3. 인스턴스 변수란?
인스턴스 변수
•
각 객체가 독립적으로 가지는 변수로, 객체마다 다른 값을 가질 수 있습니다.
•
생성자 메소드 내에서 self 키워드를 사용하여 정의합니다.
예제 코드:
class DGSW:
def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age # 인스턴스 변수
# 객체 생성
student1 = DGSW("신지윤", 18)
student2 = DGSW("이상은", 17)
# 인스턴스 변수 접근
print(student1.name, student1.age)
print(student2.name, student2.age)
Python
복사
4. 메소드란?
메소드
•
클래스 내에 정의된 함수로, 객체의 동작을 정의합니다.
•
메소드는 첫 번째 매개변수로 항상 self를 받으며, 이를 통해 인스턴스 변수를 접근하거나 수정할 수 있습니다.
예제 코드:
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * (self.radius ** 2)
# 객체 생성
circle = Circle(5)
# 메소드 호출
print(f"{circle.area()} ")
Python
복사
5. 클래스 변수란?
클래스 변수
•
클래스에 속한 변수로, 모든 객체가 공유합니다.
•
클래스 선언 내에서 직접 정의됩니다.
예제 코드:
class School:
# 클래스 변수
school_name = "ABC High School"
def __init__(self, student_name):
self.student_name = student_name
# 객체 생성
student1 = School("Alice")
student2 = School("Bob")
# 클래스 변수 접근
print(student1.school_name)
print(student2.school_name)
# 클래스 변수 수정
School.school_name = "XYZ High School"
# 클래스 변수 접근
print(student1.school_name)
print(student2.school_name)
Python
복사
6. 정적 메소드란?
정적 메소드
•
클래스와 관련 있지만 클래스나 인스턴스 변수에 접근하지 않는 메소드입니다.
•
@staticmethod 데코레이터를 사용하여 정의합니다.
예제 코드:
class Math:
@staticmethod
def add(x, y):
return x + y
# 정적 메소드 호출
result = Math.add(5, 3)
print(f"The sum is: {result}")
Python
복사
7. 클래스 메소드란?
클래스 메소드
•
클래스 변수를 조작하거나 클래스 레벨에서 동작하는 메소드입니다.
•
첫 번째 매개변수로 클래스를 받으며, cls를 사용하는 것이 관례입니다.
•
@classmethod 데코레이터를 사용하여 정의합니다.
예제 코드:
python코드 복사
class Employee:
raise_amount = 1.05
def __init__(self, name, salary):
self.name = name
self.salary = salary
def apply_raise(self):
self.salary *= self.raise_amount
@classmethod
def set_raise_amount(cls, amount):
cls.raise_amount = amount
# 클래스 메소드 호출
Employee.set_raise_amount(1.10)
# 객체 생성
emp1 = Employee("Alice", 50000)
emp2 = Employee("Bob", 60000)
# 인스턴스 메소드 호출
emp1.apply_raise()
emp2.apply_raise()
# 결과 출력
print(emp1.salary)
print(emp2.salary)
Python
복사
8. 상속이란?
상속
•
상속은 기존 클래스를 재사용하여 새로운 클래스를 만드는 방법입니다.
•
상속을 통해 코드의 재사용성을 높이고, 기능을 확장하거나 수정할 수 있습니다.
예제 코드:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
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("Misty")
# 메소드 호출
print(dog.speak())
print(cat.speak())
Python
복사
9. 오버라이딩이란?
오버라이딩
•
오버라이딩은 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의하는 것을 말합니다.
•
이를 통해 자식 클래스에서 부모 클래스의 메소드를 덮어쓸 수 있습니다.
예제 코드:
python코드 복사
class Bird:
def __init__(self, name):
self.name = name
def fly(self):
return f"{self.name} is flying!"
class Penguin(Bird):
def fly(self):
return f"{self.name} can't fly but can swim!"
# 객체 생성
bird = Bird("Sparrow")
penguin = Penguin("Pingu")
# 메소드 호출
print(bird.fly())
print(penguin.fly())
Python
복사
위의 내용을 노션에 정리한 후, 노션의 내보내기 기능을 사용하여 PDF 파일로 저장하면 됩니다.