클래스
- 객체(Object)
- 파이썬은 모든 것을 객체로 다룸.
- 숫자, 문자열, 리스트, 함수 등 모든 것이 객체로 취급됨.
- 객체는 속성(attribute)와 메서드(method)를 가질 수 있으며, 클래스에 의해 정의됨.
- 클래스(Class)
- 클래스는 객체를 생성하기 위한 템플릿 또는 설계도 역할을 함.
- 클래스는 속성과 해당 속성을 처리하기 위한 메서드를 정의함.
- 파이썬에서 클래스는 class 키워드를 사용하여 정의됨.
- 인스턴스(Instance)
- 클래스를 기반으로 생성된 실제 객체를 인스턴스라고 함.
- 각 인스턴스는 고유한 속성과 메서드를 가질 수 있음.
- 예를 들어, int 클래스의 인스턴스는 정수 값을 나타내며, str 클래스의 인스턴스는 문자열을 나타냄.
- 캡슐화(Encapsulation)
- OOP의 중요한 개념 중 하나는 캡슐화임.
- 파이썬은 클래스 내에서 속성과 메서드를 하나로 묶어 캡슐화를 지원함.
- 이로써 속성과 메서드의 응집성을 높이고 외부에서 직접 접근하지 않도록 보호할 수 있음.
- 상속(Inheritance)
- 파이썬은 상속을 통해 새로운 클래스가 기존 클래스의 속성과 메서드를 상속받을 수 있도록 지원함.
- 이는 코드 재사용을 촉진하고 계층 구조를 형성하는 데 도움이 됨.
append() 사용 여부
string1 = 'welcome to my world' ll = string1.split(' ') print(ll) # 문자열에는 append가 정의되어 있지 않아 사용 불가능 # string1.append('hello') # ll 자체가 리스트, 리스트 안에는 append 정의가 있어서 사용 가능 ll.append('hello') print(ll)
클래스 생성자(_ init _method)
# 클래스 생성자 만들기 # self가 첫번째 매개변수로 들어간다는 점 유의 class ClassRoom: def __init__(self): self.print = "welcome to my classroom"
클래서 메서드 _ call() _
- 클래스 객체를 함수처럼 사용할 수 있는 메서드
- 클래스 메서드와는 다르게 객체 자체를 함수로 사용할 수 있음
# 클래스 생성자 만들기 # self가 첫번째 매개변수로 들어간다는 점 유의 class ClassRoom: def __init__(self, num, field): self.class_num = num self.field = field def desc(self): print(f'우리반은 {self.field}를 배우는 반입니다.') def __call__(self): print(f'우리반에 오신것을 진심으로 환영합니다.')
# 객체 함수를 실행하면, 메서드 \_\_call__ 이 실행됨. nlp_class = ClassRoom(7, 'nlp') # 일반 메서드와 __call()__의 차이 nlp_class.desc() nlp_class()
# 문제 class Multiplier: def __init__(self, initial_value): self.value = initial_value # 초기값 저장 def __call__(self, other_value): return self.value * other_value # 저장된 값과 인자로 받은 값을 곱한 결과 반환 # 예시 사용법 multiplier = Multiplier(10) # 초기값 10으로 객체 생성 print(multiplier(5)) # 출력: 50 (10 * 5) print(multiplier(3)) # 출력: 30 (10 * 3) # Multiplier 클래스의 인스턴스를 만들 때, 초기값을 인자로 전달 # 예를 들어, multiplier = Multiplier(10)는 초기값으로 10을 저장하는 객체 생성 # multiplier 객체를 함수처럼 호출하여 값을 전달하면, 저장된 값과 전달된 값의 곱을 반환 # 예를 들어, multiplier(5)는 10 * 5의 결과인 50을 반환
클래서 메서드 구현
- 클래스 내부에는 객체마다 액션을 위한 함수를 설계할 수 있는데, 이를 메서드라고 함.
- 클래스 또는 객체 내에서 실행 가능한 기능 함수라고 할 수 있음.
- 메서드의 첫 번째 파라미터 또한 self임
# 문제 class Calculator: # __init__ 메서드 : 클래스의 생성자 # 객체가 생성될 때 호출되며, 두 개의 숫자를 인자로 받아 저장 # 이를 통해 각 인스턴스는 고유한 num1과 num2값을 가지게 됨 def __init__(self, num1, num2): self.num1 = num1 # 초기값 저장 self.num2 = num2 # 초기값 저장 # 각 메서드 생성 후 결과 값 반환 def add(self): return self.num1 + self.num2 def sub(self): return self.num1 - self.num2 def mul(self): return self.num1 * self.num2 def div(self): return self.num1 / self.num2 # Calculator 클래스의 인스턴스를 생성할 때, 50과 10을 인자로 전달하여 calc 객체 생성 # num1에 50, num2에 10 저장 calc = Calculator(50,10) print(calc.add()) print(calc.sub()) print(calc.mul()) print(calc.div())
클래스 상속
- 클래스를 만들 때, 다른 클래스의 기능을 ‘물려받아’ 생성함을 의미
- 조금씩 다른 여러 클래스를 만들 때, 공통된 기능을 모아 basic class를 구축해 놓으면, 상속을 통해 쉽고 빠르게 다양한 클래스 설계
- 보통 상속을 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용
- 쉽게는 기존 클래스를 수정하면 되지만 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면 상속을 사용해야 함