□ 용어정리
○ 클래스 : 객체를 만들기 위한 사용자 정의 자료형 틀
○ 인스턴스 : 클래스를 기반으로 만들어진 구체적인 객체
○ 메서드 : 클래스 내부에 선언된 함수
○ 상속 : 어떤 클래스의 특성을 다른 클래스에 전달하는 기법
○ 메서드 오버라이딩 : 같은 함수에 여러기능을 부여하는 구현기법으로 부모/자식 클래스에서 사용되는 함수이름이 같음
□ 예제 1) 기본형태
#기본형식
#클래스 지정
class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
#객체 지정 → 위에서 지정한 클래스로 a, b 객체 생성. a, b 객체는 Calualator에서 지정한 메서드 사용가능
a = Calculator()
print(a.add(5)) #출력값 5
print(a.add(10)) #출력값 15
b = Calculator()
print(b.add(8)) #출력값 8
print(b.add(20)) #출력값 28
□ 예제 2) 사칙연산
#클래스 지정
class FourCal:
def set_data(self, first_num, second_num):
self.first_num = first_num
self.second_num = second_num
def add(self):
result = self.first_num + self.second_num
return result
def mul(self):
result = self.first_num * self.second_num
return result
def sub(self):
result = self.first_num - self.second_num
return result
def div(self):
result = self.first_num / self.second_num
return result
#클래스 Fourcal 이라는 틀을 활용해 a 객체 생성
a = FourCal() #객체지정
a.set_data(50, 40) #객체>객체메서드로 데이터 세팅
print(a.add()) #객체>객체메서드 사용
print(a.mul()) #객체>객체메서드 사용
print(a.sub()) #객체>객체메서드 사용
print(a.div()) #객체>객체메서드 사용
□ 예제 3) 사칙연산 : 생성자__init__사용
#클래스 지정
class FourCal:
def __init__(self, first_num, second_num):
self.first_num = first_num
self.second_num = second_num
def add(self):
result = self.first_num + self.second_num
return result
def mul(self):
result = self.first_num * self.second_num
return result
def sub(self):
result = self.first_num - self.second_num
return result
def div(self):
result = self.first_num / self.second_num
return result
#클래스 Fourcal 이라는 틀을 활용해 a 객체 생성
b = FourCal(20,60) #클래스내 __init__생성자로 인하여 클래스 지정과동시에 매개변수 설정가능
print(b.add()) #객체>객체메서드 사용
print(b.mul()) #객체>객체메서드 사용
print(b.sub()) #객체>객체메서드 사용
print(b.div()) #객체>객체메서드 사용
□ 예제 4) 상속 : class 자식_상속클래스명(부모_ 상속할클래스명)
#클래스 지정
class FourCal:
def __init__(self, first_num, second_num):
self.first_num = first_num
self.second_num = second_num
def add(self):
result = self.first_num + self.second_num
return result
def mul(self):
result = self.first_num * self.second_num
return result
def sub(self):
result = self.first_num - self.second_num
return result
def div(self):
result = self.first_num / self.second_num
return result
#상속클래스 지정
class Clone_Fourcal(FourCal):
pass #부모클래스 상속후 건드리지 않고 그대로 사용하겠다고 하면 pass
new_a = Clone_Fourcal(50, 40) #상속클래스를 활용하여 객체 생성 및 매개변수 입력. 상속클래스로 생긴 객체는 부모클래스의 메서드또한 가지고 있으므로 활용 가능
print(new_a.add())
print(new_a.mul())
print(new_a.sub())
print(new_a.div())
□ 예제 5) 상속/오버라이딩: class 자식_상속클래스명(부모_ 상속할클래스명)
#부모 클래스
class Car:
def __init__(self, color, speed):
self.color = color
self.speed = speed
def upSpeed(self, value):
self.speed += value
return self.speed
def downSpeed(self, value):
self.speed -= value
return self.speed
# 자식 클래스 - Sedan
class Sedan(Car):
# upSpeed 메서드 오버라이딩
def upSpeed(self, value):
# 오버라이딩된 부분
super().upSpeed(value) # 부모 클래스의 upSpeed 메서드 호출
if self.speed >= 150:
self.speed = 150
return self.speed
#부모클래스 Car를 활용하여 obba_car 객체 생성
obba_car = Car("red", 50)
print(obba_car.upSpeed(100))
print(obba_car.downSpeed(80))
print(obba_car.upSpeed(100)) # 속도 150이 넘어도 출력됨
# #부모클래스 Car의 자식클래스 Sedan을 활용하여 brother_car 객체 생성
brother_car = Sedan("빨강", 50)
print(brother_car.upSpeed(30))
print(brother_car.upSpeed(50))
print(brother_car.upSpeed(50)) # 속도 150이 넘으면 150으로 출력됨. 자식클래스에서 부모클래스의 메서드를 오버라이딩하여 정의 후 활용했기 때문임