class 한번 정리는 했었지만, 이번에 다시 공부하면서 새로 알게 된 사실 정리!
comedian이 class가 되고 그 instance들이 이영자 외 3명이고,
이 사람들은 instance들을 객체가 된다.
class: 같은 부류끼리 나눔
클래스를 사용하면 코드의 구조를 더 효과적으로 구현 가능하다.
클래스 위주로 코드를 작성하는 것을 객체 지향 프로그래밍(object oriented programming)이라한다.
class Car:
pass
class를 정의
hyundai = Car()
bmw = Car()
클래스 실체화
즉, car 클래스를 실체화한것이 현대와 bmw 라는 객체이다.
class Car:
def __init__(self, maker, model, horse_power):
self.maker = maker
self.model = model
self.horse_power = horse_power
hyundai = Car("현대", "제네시스", 500)
2-1. self
self는 어떠한 실체를 가리키는 단어.
instance의 object들을 가리킨다.
class 변수에 접근할때 self를 사용!!!!!
2-2. init
__init__
메소드는 클래스가 실체화 될때 자동으로 호출이 된다.__init__
메소드의 self
파라미터는 클래스가 실체화된 객체를 넘겨주어야 하며, 파이썬이 자동으로 넘겨준다.__init__
메소드의 self
파라미터는 항상 정의되어야 있어야 하며 맨 처음 파라미터로 정의 되어야 한다 (그래야 파이썬이 알아서 넘겨줄 수 있으므로)Q. Class 를 직접 구현해 보겠습니다.
Database
라는 이름의 class를 구현해 주세요.
Database
클래스 내부에 다음의 속성(attribute)들을 선언해주세요.
name
: database의 이름size
: 저장할 수 있는 데이터의 max 사이즈. Size를 넘어서는 데이터를 저장할 수 없다.Database
클래스 내부에 다음의 메소드들을 구현해주세요.
insert
select
update
delete
각 메소드들에 대한 설명은 아래와 같습니다.
Insert
insert
메소드는 self
외에 2
개의 parameter를 받습니다.
field
와 value
입니다.
Field
는 저장하고자 하는 데이터의 필드명이고 value
는 값입니다.
Field
와 value
는 내부적으로 dictionary
에 저장되어야 합니다.
insert
메소드는 다음 처럼 호출 할 수 있습니다.
# 객체 이름이 db 라는 가정하에
db.insert("name", "정우성")
insert
메소드는 특별한 return 값은 없습니다.
단, 만일 내부 dictionary의 총 사이즈가 Database
클래스의 size
속성보다 크면 더이상 새로운 값들을 저장하지 말아야 합니다.
Select
select
메소드는 self
외에 1개의 parameter를 받습니다.
바로 field
입니다.
field
는 읽고자 하는 데이터의 필드명 입니다.
내부적으로 데이터를 저장하고 있는 dictionary에서 해당 field
에 해당하는 키와 연결되어 있는 값을 return 해주어야 합니다.
예를 들어, 이미 name
이라는 필드명으로 "정우성"
이라는 값을 저장했다고 한다면:
# 객체 이름이 db 라는 가정하에
db.select("name")
> "정우성"
이 되어야 합니다.
만일 해당 필드값으로 저정되어 있는 값이 없다면 None
을 return 해주세요.
Update
self
외에 2
개의 parameter를 받습니다.
field
와 value
입니다.
이름 그대로 이미 저장되어 있는 값을 수정하는 메소드 입니다.
# 객체 이름이 db 라는 가정하에
db.update("name", "아이유")
만일 field
값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.
그리고 특별한 return
값은 없습니다.
Delete
delete
메소드는 self
외에 1
개의 parameter를 받습니다.
field
입니다.
field
는 지우고자 하는 데이터의 필드명 입니다.
# 객체 이름이 db 라는 가정하에
db.delete("name")
만일 field
값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.
그리고 특별한 return
값은 없습니다.
class Database:
def __init__(self,name, size):
self.name = name
self.size = size
self.data = {} # 비어있는 딕셔너리를 만들어준다.
def insert (self,field,value):
if len(self.data) >= self.size: # class에 있는 변수들에 접근할때는 self를 사용한다.
pass
else:
self.data[field] = value # value는 insert 메서드에 접근하는 것이니 self 사용 안한것임!!
def select (self,field):
if field in self.data:
return self.data[field]
else:
return None
def update(self,field, value):
if field in self.data:
self.data[field] = value
def delete (self,field):
if field in self.data:
del self.data[field]
else:
pass
class 변수에 접근 할때 self를 쓰고 단순히 method parameter에 접근할때는 사용하지 않는다