[Python] 4. 클래스
1. 객체지향
· 객체(object) ? :
- 서로 연관된 부품과 기능들을 모아둔다.
- 자동차 = 변수 (자동차 부품 : ex. 휠, 바퀴, 문, 범퍼, ...) + 함수 (자동차 기능 : ex. 전진, 후진, 브레이크, ...)
· 객체지향 프로그래밍(object-oriented programing) ? :
- 실제세계를 모델링하여 프로그램을 개발하는 개발 방법론
- 프로그램 개발 규모가 커지면서 > 처음부터 모든 것을 만드는게 아니라 다른 사람이 만든 코드를 사용 공유 > 협업이 용이하게 됨
· 객체지향언어 :
- JAVA : 객체지향 프로그래밍 가능
- python : 완전한 객체지향언어라고 할 수는 없지만, class를 활용하면 객체지향적인 기능을 어느정도 구현할 수 있음
# 🍪를 만드는데 필요한 변수, 함수를 각각 따로 선언할 경우
cookie_sugar = 10
cookie_flour = 70
cookie_milk = 10
def calories(sugar, flour, milk):
return sugar*4 + flour*2 + milk*1
cookie_calories = calories(cookie_sugar, cookie_flour, cookie_milk)
print(cookie_calories) # 190
# 🍪에 관련된 변수, 함수를 모아서 Cookie 클래스 생성
class Cookie :
def __init__(self, sugar, flour, milk) :
self.sugar = sugar
self.flour = flour
self.milk = milk
def calories(self):
return self.sugar*20 + self.flour*10 + self.milk*5
# 쿠키 레시피대로 생산 > plain_cookie 객체 생성 (Cookie클래스의 인스턴스)
plain_cookie = Cookie(10, 70, 10)
print(plain_cookie.calories()) # 950
# 쿠키 레시피로 다른 쿠키 찍어내기 가능 > extrasugar_cookie 객체 생성
extrasugar_cookie = Cookie(30, 70, 10)
print(extrasugar_cookie.calories()) # 1350
2. 클래스 Class
· 클래스(class) :
- 하나의 객체(object)에 대한 설계도 > 여러개의 함수를 포함
- 식별자 컨벤션 : 클래스 Pascalase, UpperCamelCase / 변수, 함수 snake_case
* 컨벤션 (convention) : 관례, 관습 (룰은 아니어서 어겨도 돌아는 가지만 보기에 좋지 않음)
· 클래스 사용법 :
- 함수 : 함수선언(코드작성) > 함수호출(코드실행)
- 클래스 : 선언(코드작성) > 객체생성(메모리 사용) > 메서드실행(코드실행)
- 자동차(ex) : 설계도 작성 > 제품생산 > 기능 이용
* 메서드 vs 함수 : 매서드 (클래스 안에서 선언되어서 묶여 있는 함수), 함수(클래스 밖에서 선언된 함수)
·
- class
- self
- 사용자 정의 데이터타입
- special methods : ex. __init__( ), __add__( ) ...
- 상속
- super
- getter-setter
- mangling
- 메서드의 종류들(인스턴스, 클래스, 스태틱)
계산기 설계
# dir() : 객체에 들어있는 변수를 출력해주는 함수
print(dir(calc1))
print([var for var in dir(calc1) if var[0]!='_']
special method 스페셜 메서드
· 객체를 생성할 때 실행되는 메서드
· 변수의 쵝값을 설정할 때 주로 사용 > 불량 객체가 만들어질 확률을 줄여줌.
def __init__(self, balance=20000):
self.balance = balance
# 생성자 메서드도 함수이기 때문에 balance=20000 처럼 디폴트 값을 설정할 수 있음.
사용자 정의 데이터 타입
· type(object) = Class()
- 인스턴스(plain_cookie)는 클래스(Cookie)로 만들어진다.
- 객체의 데이터 타입(type(plain_cookie))은 클래스(Cookie) 이다.
· 이미 정의된 데이터 타입 (클래스)
- data = [1, 2, 3]
- type(data)는 list
- data객체가 만들어진 클래스는 list > list 클래스는 우리가 만들지 않았지만 이미 만들어져 있음
- 클래스인데 List가 아니라 list인 이유? : python 이 아니라 c언어로 구현되어 있음
- dir(list) 사용 가능 > 메서드 출력됨
3. 상속
· 다른 클래스의 변수(메서드)를 가져와서 사용하는 방법 > 반복 줄임
# 각각의 클래스로
class iPhone1:
def call(self):
print('calling!')
class iPhone2:
def call(self):
print('calling!')
def send_msg(self):
print('send_msg!')
class iPhone3:
def call(self):
print('calling!')
def send_msg(self):
print('send_msg!')
def internet(self):
print('internet!')
# 상속 사용
class iPhone1:
def call(self):
print('calling!')
class iPhone2(iPhone1):
def send_msg(self):
print('send_msg!')
class iPhone3(iPhone2):
def call(self):
print('video calling!')
def internet(self):
print('internet!')