[PYTHON] Class
Class
: 코드의 구조를 효과적으로 구현하기 위함.
: 클래스 위주로 작성하는 것 = 객체 지향 프로그래밍
: 메소드와 함수들의 집합이다.
긴말보다 코드부터 살펴보자.
class Car:
def __init__(self, maker, model, horse_poewer)
self.maker = maker
self.model = model
self.horse_power = horse_power
=> 클래스 Car 는 maker, model, horse_power라는 공통요소를 가지고 있다.
=> 여기서 self 는 class의 실체 즉, 객체 (object)를 말하고 객체들은 이러한 공통요소를 가지고 있음을 말한다.
즉 class Car에 속한 객체들은 maker, model, horse_power 3개의 요소를 가지고 있다는 것을 말한다.
hyundai = Car("현대","제네시스",500)
hyundai 는 클래스 Car의 객체임을 선언.
여기서 __init__ 메소드가 호출되어있음 클래스가 실체화될때 자동으로 호출된다.
여기서 파라미터를 받는 건 self 를 포함한 4개이여야하지만 3개만 받고있다.
self는 클래스 객체를 뜻하는 것이기에 클래스 car의 객체를 선언하고 나머지 파라미터를 받아온다고 생각하자.
이제 그 밑단에 있는 self.maker = maker 이줄을 해석하면
객체의 maker = maker
객체의 model = model
객체의 horse_power = horse_power
객체의 속성에 그값을 저장하고 있는 것을 확인할 수 있는데, 다른 메소드에서 사용하기위한 것이다.
Class Method
: 객체에 특징말고 action을 부여하자
클래스에는 __init__ 말고도 다른 메소드를 원하는대로 추가할 수 있다.
Method(메소드) 와 atrribute(속성) 차이는 명사와 동사 차이로 이해하면 쉽다.
Method(메소드)는 해당 객체의 이름이나 성질을 포함한다면
atrribute(속성)은 move, parking 등 객체가 할 수 있는 action을 설정하는 것이라고 생각하자.
class Car:
def __init__(self, maker, model, horse_power):
self.maker = maker
self.model = model
self.horse_power = horse_power
def honk(self):
return "빠라바라빠라밤"
이제 현대차 객체는 honk메소드를 가진 객체가 된다.
hyundai = Car("현대", "제네시스", 500)
hyundai.honk()
현대차의 honk메소드를 부르게 되면
> "빠라바라빠라밤"
만약에 이 경적소리를 어떤 메이커가 하고 있는지 티를 내고 싶다면?
def honk(self):
return f"{self.maker} 빠라바라빠라밤"
> 현대 빠라바라빠라밤
이제 한번 실습을 해보면 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 = {}
# 빈딕셔너리 생성
# 클래스 Database 에 포함된 객체는 이러한 4개의 공통요소를 가짐
def insert(self,field,value):
if len(self.data) >= self.size:
print('full')
else:
self.data.update({field:value})
#빈 딕셔너리에 key값과 value 값을 update
def select(self,field):
if field in self.data:
return self.data[field]
else:
return None
def update(self,field,value):
keys = self.data.keys()
#data에 있는 모든 key값 가져옴
if field in keys:
self.data.update({field:value})
return self.data
else:
print('null')
def delete(self,field):
keys = self.data.keys()
if field in keys:
print(self.data.pop(field))
else:
print("null")
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net