객체 지향 프로그래밍 : 클래스 기반의 객체를 우선으로 생각하는 프로그래밍객체지향 프로그래밍 언어 : Java , Python , PHP 등객체 : 구현하고자 하는 대상의 속성과 기능을 가지는 프로그래밍 단위추상화 : 객체를 구성하고 있는 속성이 많ㅇ느 경우 필요한 속성만을 이용해 객체를 표현하는 개념oz_students = [
{"name": "백현우", "python": 4, "database": 3, "Django": 3, "AWS": 2},
{"name": "홍혜인", "python": 4, "database": 5, "Django": 2, "AWS": 4},
{"name": "윤은성", "python": 3, "database": 4, "Django": 4, "AWS": 1},
{"name": "홍수철", "python": 2, "database": 3, "Django": 1, "AWS": 5},
]
-------------------------------------------------------------------------
# 속성과 관련된 코드 개선
def create_oz_student(name, python, database, django, AWS):
return{
"name": name,
"python": python,
"database": database,
"django": django,
"AWS": AWS
}
oz_students = [
create_oz_student("백현우",4 ,3 ,3 ,2),
create_oz_student("홍혜인",4 ,5 ,2 ,4),
create_oz_student("윤은성",3 ,4 ,4 ,1),
create_oz_student("홍수철",2 ,3 ,1 ,5)
]
-------------------------------------------------------------------------
print("이름", "총점", "평균", sep="\t")
for student in oz_students:
ability_sum = student["python"] + student["database"] + student["django"] +\
student["AWS"]
ability_average = ability_sum / 4
print(student["name"], ability_sum, ability_average, sep="\t")
#객체화
def create_oz_student(name, python, database, django, AWS):
return{
"name": name,
"python": python,
"database": database,
"django": django,
"AWS": AWS
}
# 객체를 사용한 기능 처리
def get_sum(student): # 밑에서 for문이 student를 정의할것 이기 때문에 미래를 준비한것
return student["python"] + student["database"] + student["django"] + student["AWS"]
def get_average(student):
return get_sum(student) / 4
def to_string(student):
return f'{student["name"]}\t{get_sum(student)}\t{get_average(student)}'
#데이터 입력
oz_students = [
create_oz_student("백현우",4 ,3 ,3 ,2),
create_oz_student("홍혜인",4 ,5 ,2 ,4),
create_oz_student("윤은성",3 ,4 ,4 ,1),
create_oz_student("홍수철",2 ,3 ,1 ,5)
]
#총점은 프로그래밍 활용 능력의 총합, 평균은 프로그램 활용 능력의 총합의 평균
print("이름", "총점", "평균", sep="\t")
for student in oz_students:
print(to_string(student))
# 클래스를 선언(만들다)합니다.
class CreateOzStudent:
pass
student = CreateOzStudent()
oz_students = [
CreateOzStudent("백현우",4 ,3 ,3 ,2),
CreateOzStudent("홍혜인",4 ,5 ,2 ,4),
CreateOzStudent("윤은성",3 ,4 ,4 ,1),
CreateOzStudent("홍수철",2 ,3 ,1 ,5)
]
객체 : 코드로 만들어진 무언가(데이터와 기능을 가진 덩어리)
클래스 : 객체를 찍어내는 설계도 , 클래스를 이용해 ~를 만들면 ~객체 생성생성자 : 객체를 만들 때 자동으로 실행되는 특별한 함수 (init)
인스턴스 : 클래스로부터 실제로 만들어진 객체
클래스 이름과 같은 함수 : 생성자
인스턴스 라고 함생성자 함수 / student : 인스턴스class 클래스 이름:
def __init__(self, 추가적인 매개변수):
클래스.메소드()만으로 쉽게 기능을 이용 가능한 것class CreateOzStudent:
def __init__(self, name, python, database, django, AWS):#name, python 등은 식별자
self.name = name
self.python = python
self.database = database
self.django = django
self.AWS = AWS
def get_sum(self):
return self.python + self.database + self.django + self.AWS
def get_average(self):
return self.get_sum() / 4
def to_string(self):
return f'{self.name}\t{self.get_sum()}\t{self.get_average()}'
#데이터 입력
oz_students = [
CreateOzStudent("백현우",4 ,3 ,3 ,2),
CreateOzStudent("홍혜인",4 ,5 ,2 ,4),
CreateOzStudent("윤은성",3 ,4 ,4 ,1),
CreateOzStudent("홍수철",2 ,3 ,1 ,5)
]
print("이름", "총점", "평균", sep="\t")
for student in oz_students:
print(student.to_string())
self.식별자 def get_sum(self):
class Student:
def __init__(self):
pass
student = Student() # student : 인스턴스 , Student() : 생성자 함수
print("isinstance(student, Student):", isinstance(student, Student))
# isinstance(student, Student): True
class Python:
def study(self):
print("파이썬을 수강중입니다.")
class Java:
def teach(self):
print("자바를 수강중입니다.")
programming_subjects = [Python(), Python(), Python(), Java(), Python()]
for subject in programming_subjects:
if isinstance(subject, Python):
subject.study() # 파이썬을 수강중입니다.
elif isinstance(subject, Java):
subject.teach() # 자바를 수강중입니다.
class CreateOzStudent:
def __init__(self, name, python, database, django, AWS):#name, python 등은 식별자
self.name = name#self가 가지고 있는 속성과 기능에 접근하는 방법 self.식별자
self.python = python
self.database = database
self.django = django
self.AWS = AWS
def get_sum(self):
return self.python + self.database + self.django + self.AWS
def get_average(self):
return self.get_sum() / 4
--------------------------------------------------------------------------
def to_string(self):
return f'{self.name}\t{self.get_sum()}\t{self.get_average()}'
--------------------------------------------------------------------------
def __str__(self): # __str__적용
return f'{self.name}\t{self.get_sum()}\t{self.get_average()}'
--------------------------------------------------------------------------
#데이터 입력
oz_students = [
CreateOzStudent("백현우",4 ,3 ,3 ,2),#CreateOzStudent() 생성자를 이용해 리스트 안에 데이터 생성
CreateOzStudent("홍혜인",4 ,5 ,2 ,4),
CreateOzStudent("윤은성",3 ,4 ,4 ,1),
CreateOzStudent("홍수철",2 ,3 ,1 ,5)
]
print("이름", "총점", "평균", sep="\t")
--------------------------------------------------------------------------
for student in oz_students:
print(student.to_string())
--------------------------------------------------------------------------
for student in oz_students: # __str__적용
print(str(student))
--------------------------------------------------------------------------
str : 메서드처럼 .함수 가 아닌 str()로 객체를 문자열로 표현시 자동으로 실행된다.
eq : 함수이름으로 사용시 print(student == student2)처럼 ==으로 사용가능
클래스명.변수로 접근 가능)class Account:
interest_rate = 0.05
a = Account("철수", 1000)
b = Account("영희", 2000)
print(Account.interest_rate) # 클래스 이름으로 접근 → 0.05
print(a.interest_rate) # 인스턴스로 접근 → 0.05
print(b.interest_rate) # 인스턴스로 접근 → 0.05
class 클래스 이름:
클래스 변수 = 값
[클래스 변수에 접근하기]
클래스 이름.변수 이름
class CreateOzStudent:
count = 0 # 클래스 변수 만들기
def __init__(self, name, python, database, django, AWS):#name, python 등은 식별자
self.name = name#self가 가지고 있는 속성과 기능에 접근하는 방법 self.식별자
self.python = python
self.database = database
self.django = django
self.AWS = AWS
CreateOzStudent.count += 1 # 클래스 변수에 접근하기
print(f'{CreateOzStudent.count}번째 수강생의 정보가 추가되었습니다.')
#데이터 입력
oz_students = [
CreateOzStudent("백현우",4 ,3 ,3 ,2),
CreateOzStudent("홍혜인",4 ,5 ,2 ,4),
CreateOzStudent("윤은성",3 ,4 ,4 ,1),
CreateOzStudent("홍수철",2 ,3 ,1 ,5)
]
print()
print(f'현재 데이터가 입력된 총 수강생은 {CreateOzStudent.count}입니다.')
[ 클래스 데코레이터를 이용하여 클래스 함수를 만드는 구문 ]
class 클래스 이름:
@classmethod
def 클래스 함수(cls, 매개변수):
pass
[ 클래스 함수를 호출하는 방법 ]
클래스 이름.함수 이름(매개변수)
class CreateOzStudent:
students = []
@classmethod
def print(cls):
print("수강생 데이터베이스 정보")
print("이름\t총점\t평균")
for student in cls.students:
print(str(student)) # 형변환이 아닌 def __str__(self): 이거
def __init__(self, name, python, database, django, AWS):#name, python 등은 식별자
self.name = name#self가 가지고 있는 속성과 기능에 접근하는 방법 self.식별자
self.python = python
self.database = database
self.django = django
self.AWS = AWS
CreateOzStudent.students.append(self)
def get_sum(self):
return self.python + self.database + self.django + self.AWS
def get_average(self):
return self.get_sum() / 4
def __str__(self):
return f'{self.name}\t{self.get_sum()}\t{self.get_average()}'
#데이터 입력
CreateOzStudent("백현우",4 ,3 ,3 ,2)
CreateOzStudent("홍혜인",4 ,5 ,2 ,4)
CreateOzStudent("윤은성",3 ,4 ,4 ,1)
CreateOzStudent("홍수철",2 ,3 ,1 ,5)
CreateOzStudent.print()
CreateOzStudent("백현우",4 ,3 ,3 ,2) ->이 내용이 student 리스트에 들어감
@classmethod : 클래스 데코레이터 이용
for student in cls.students
print(str(student)) : 형변환이 아닌 str(self): 이거 때문에 변환하는 것
클래스 함수는 CreateOzStudent.함수명()으로 실행
import math
class OzCircle:
def __init__(self, __radius):
self.__radius = radius
def get_circumference(self):
return 2 * math.pi * self.__radius
def get_area(self):
return math.pi * (self.__radius ** 2)
circle = OzCircle(10)
circle.radius = -2
print("원의 둘레:", circle.get_circumference())
print("원의 넓이:", circle.get_area())
#자식클래스를 만들때 사용할 부모 클래스
class Parent:
def __init__(self):
self.value = "테스트"
print("Parent 클래스의 __init()__ 메소드가 호출되었습니다.")
def test(self):
print("Parent 클래스의 test() 메소드입니다.")
#Parent 클래스를 매개변수로 넣어 자식 클래스를 만듭니다. -> 상속
class Child(Parent):
def __init__(self):
super().__init__()
print("Child 클래스의 __init()__ 메소드가 호출되었습니다.")
#자식 클래스의 인스턴스를 생성합니다.
child = Child()
#부모 클래스에 있는 메소드를 호출합니다.
child.test()
#부모 클래스에 있는 속성을 출력합니다.
print(child.value) # 테스트
# child.test() 출력 결과
# Parent 클래스의 __init()__ 메소드가 호출되었습니다.
# Child 클래스의 __init()__ 메소드가 호출되었습니다.
# Parent 클래스의 test() 메소드입니다.
class Vehicle:
def __init__(self,make,model):
self.make=make
self.model=model
def display_info(self):
return f'이 차량은 {self.make}에서 제조한 {self.model}입니다.'
class Truck(Vehicle):
def __init__(self, make, model, payload):
super().__init__(make, model)
self.payload = payload
def payload_info(self):
return f"적재량: {self.payload}kg"
class Car(Vehicle):
def __init__(self, make, model, seats):
super().__init__(make, model)
self.seats = seats
def seats_info(self):
return f"좌석 수: {self.seats}"
truck = Truck("테슬라", "사이버트럭", 800)
print(truck.display_info())
print(truck.payload_info())
car = Car("포르쉐", "카이옌", 4)
print(car.display_info())
print(car.seats_info())