2018~/Python Skill Up
5. 클래스 - 기초 정의 및 인스턴스 생성
반원_SemiCircle
2019. 9. 6. 10:26
개요
객체 지향 프로그래밍 언어를 대표하는 JAVA와 파이썬을 언어론적으로 이해해보자.
객체와 클래스
- 객체 : 내가 만들고 싶은 특정 대상. 다소 범위가 넓음( 자동차 )
- 클래스 : 내가 만들고 싶은 특정 대상을 코드로 표현하는 것. 클래스 내부에는 속성과 메소드로 이루어진다.
- 클래스 내의 속성
- 특정 데이터의 값에 해당
- 자동차 사이즈, 색깔, 현재속도 등 값으로서의 역할
- 코드상으로는 단순한 값일 경우가 많다. 현재속도 = 0, 색깔 = 'red'
- 클래스 내의 메소드
- 기능으로서의 역할
- 클래스 속성에 영향을 줄 수도 안 줄 수도 있다.
- 속성에 영향을 주는 경우 : 브레이크 기능 -> 속도 속성을 감속한다.
- 속성에 영향을 안주는 경우 : 차량의 전체 정보를 조회하는 기능 -> 속성엔 영향을 안준다.
- 코드상으로는 함수로 구현되어있다.
클래스와 인스턴스(instance)
- 클래스는 객체를 참고해서 만든 틀일 뿐이다.(표현한 것 분)
- 이 틀을 참고하여 틀에 맞는 실제 데이터를 만드는데, 이 만들어진 것을 인스턴스(instance)라고 한다.
객체와 클래스와 인스턴스를 비유
- 길거리에 파는 붕어빵을 만들고 싶다고 생각한다. 이 때 붕어빵은 객체(Object)
- 붕어빵의 재료들을 생각하며 틀을 제작한다. 이 때 틀이 클래스(class)
- 이 틀에 재료를 넣어 실제로 붕어빵을 생산해낸다. 이 때 만들어진 붕어빵이 인스턴스(instance)
- 붕어빵을 제작할 때 재료에 따라 만들어지는 붕어빵도 달라진다. 즉, 인스턴스는 서로 독립적이다.
클래스 생성자 메소드 : __init__
- 클래스를 호출하여 인스턴스 생성시 무조건적으로 실행되는 함수.
- 클래스를 통해 인스턴스를 만들 때 필요한 인자들을 넣어주어, 인스턴스를 생성(반환)한다.
- 붕어빵을 만들 때 재료를 다르게 넣을 수 있는 것처럼, 생성자 메소드에 인자를 다양한 값으로 넣어주어 인스턴스를 다양하게 생성할 수 있다.
기본예제 - 정의
class FishBread:
def __init__(self,outer,inner):
#인스턴스 속성 설정
self.outer = outer #겉
self.inner = inner #속
self.count = 10 #남은 횟수
self.eatable = True #먹을 수 있는지 여부
#기능(메소드)을 정의
#조회하기
def print(self):
print("해당 붕어빵 정보 : ", self.outer, self.inner, self.count, self.eatable)
#먹기
def eat(self):
if self.eatable: #먹을 수 있는 경우
print("먹었습니다.")
self.count -= 1
if self.count < 1: #더 이상 남지 않음
self.eatable = False
else:
print("먹을 수 없습니다.")
클래스를 이용한 인스턴스 생성과 메소드 사용
- 이를 통해 왜 어떤 함수는 앞에 . 을 붙여 실행하는지 이해할 수 있다.
class FishBread:
def __init__(self,outer,inner):
#인스턴스 속성 설정
self.outer = outer #겉
self.inner = inner #속
self.count = 10 #남은 횟수
self.eatable = True #먹을 수 있는지 여부
##기능(메소드)을 정의
#조회하기
def print(self):
print("해당 붕어빵 정보 : ", self.outer, self.inner, self.count, self.eatable)
#먹기
def eat(self):
if self.eatable: #먹을 수 있는 경우
print("먹었습니다.")
self.count -= 1
if self.count < 1: #더 이상 남지 않음
self.eatable = False
else:
print("먹을 수 없습니다.")
##메인 영역
f1=FishBread('밀','팥')
f2=FishBread('쌀','슈크림')
#현재 붕어빵 상태
f1.print()
f2.print()
#붕어빵1에 eat 메소드 12번 실행
for i in range(12):
f1.eat()
#현재 붕어빵 상태
f1.print()
f2.print()
#출력결과
해당 붕어빵 정보 : 밀 팥 10 True
해당 붕어빵 정보 : 쌀 슈크림 10 True
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹었습니다.
먹을 수 없습니다.
먹을 수 없습니다.
해당 붕어빵 정보 : 밀 팥 0 False
해당 붕어빵 정보 : 쌀 슈크림 10 True
파이썬 명명 규칙
언더스코어(_)의 특별한 의미
- 접미사 하나를 사용한 경우 : 내부에서 사용한다는 의미
- 접미사 두개를 사용한 경우 : 클래스 내부에 protect로 사용한다는 의미
- 접두사 하나를 사용한 경우 : 파이썬 키워드와의 충돌을 방지한다는 의미
명명규칙
- 패키지와 모듈 이름 : 짧은 소문자 + 언더스코어
- 클래스 이름 : CapWords규칙을 따른다. 단어마다 첫글자는 대문자.
- 예외 이름 : 예외는 클래스이므로 CapWords규칙을 따르고 Error 접미사를 사용한다.
- 전역 변수 이름 : 언더스코어를 붙여서 해당 모듈에서만 쓰이도록 한다.
- 함수 이름 : 소문자 + 언더스코어
- 메서드 이름과 인스턴스 변수 : 소문자 + 언더스코어
- 상수 : 대문자 + 언더스코어
#명명 예시
ClassName
ExceptionName
module_name
package_name
method_name
function_name
function_parameter_name
global_var_name
local_var_name
instance_var_name
GLOBAL_CONSTANT_NAME