반원 블로그

5. 클래스 - 기초 정의 및 인스턴스 생성 본문

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

상세 내용 참고
링크1
링크2

Comments