본문 바로가기
SK 행복성장캠퍼스/Python 기초

0904_5일차_함수_클래스

by NickNuma 2020. 9. 7.

클래스에 대한 설명입니다.

 


클래스객체지향 프로그래밍 언어에서 보이는 개념입니다. => python은 물론이고 C++, C#,  자바, 자바 스크립트에서도 볼 수 있는 개념이지요.
( OOP : Obejct Oriented Programming : 객체 지향 프로그래밍 )
객체현실세계에서 주체가 눈으로 보여지는 사물을 뜻합니다.
객체는 모두 속성값과 동작값으로 구성되어있습니다.
ex) 현실 세계의 고양이 객체           = 고양이 클래스
                     속성 : 이름, 나이, .... = (인스턴스) 변수
                     동작 : 먹다, 자다, .... = 매서드 (함수)

아무리 봐도.. 하루 종일 포스팅을 한 것도 있고... 여러 이유로... 그냥 제가 쓴 주석을 올리는게 설명이 편할 것 같군요.

"""
    클래스 (class)
    1. 클래스 개념을 사용하는 프로그램 언어 : 자바, 자바 스크립트, C++, C#, python
    2. 객체지향 프로그래밍 방법론에서 등장한 개념
        ( OOP : Object Oriented Progamming : 객체 지향 프로그래밍 )

    3. 객체(object)?
        ==> 현실세계에서 주체(subject:자기 자신)가 눈으로 보여지는 사물(대상)
        예 > 책상, 노트북, 학생, 강사, 핸드폰, 차, .....

    4. 객체의 구성요소?    => 객체는 속성과 동작으로 구성되어 있다.
        예> 노트북 객체
            가. 속성
                - 가격
                - 색상
                - 제조사....

            나. 동작
                - on
                - off
                - sound
                - click
                - music play....

        * 개발 프로세스
            분석(객체추출) --> 설계 --> 구현 --> 테스트 --> 배포

            예> 애완동물 관리 프로그램 개발 -->객체 추출( 고양이 객체:
            (고양이, 강아지, ....)                        고양이 객체의 속성: 이름, 나이, 성별,....
                                                        고양이 객체의 동작: 먹다, 자다, 울다,....
    OOP 개념 적용 (객체 지향 프로그래밍 방법론)
        현실 세계                           가상세계 (python)
        고양이 객체                          고양이 클래스
        속성 : 이름, 나이, ...               (인스턴스) 변수
        동작 : 먹다, 자다, ...               메서드 (함수)

"""

 


클래스인스턴스 변수, 메서드 (함수), 생성자 (함수)로 구성됩니다.
문법 (Syntax) : Class 클래스명:             ===> 클래스명은 첫글자가 반드시 대문자
                           pass
클래스란 하나의 거푸집입니다. 이 거푸집을 갖고 객체를 생성합니다. ( 인스턴스(화) 선언 )

"""
    1) 클래스의 구성요소
        - 인스턴스 변수 : 객체의 속성(데이터)을 저장
        - 메서드 (함수) : 기능적인 처리 담당
        - 생성자 (함수) : 인스턴스 변수에 값을 맨 처음 설정하는 역할 (초기화 작업)

    2) 클래스 작성 문법 (Syntax) : ==> 클래스명은 반드시 첫글자 대문자, 의미있는 명사형
        문법 :
                Class 클래스명:
                    pass

        ==> 실제 메모리에 올라가는 인스턴스를 생성하기 위한 틀(설계도) 역할 담당.
        ==> 반드시 '객체생성'이라는 작업이 필요하다. ===> 클래스의 구성요소가 메모리에 올라가는 작업 == 인스턴스화 (선언)
                                                ===> Class라는 거푸집에서 실제값을 갖는 인스턴스를 메모리에 올림 (객체 생성)
            문법 : 변수명 = 클래스명()
                  클래스명() => 인스턴스 선언 / 객체 생성 = 생성자 (함수) 호출 ( 클래스명() 밑의 def __init__ 생성자 (함수) 호출 )
                  ( int(), str(), sum(), ... ==> 함수 호출 (def int(), def str(), def sum(), ...)
"""
#2. 객체 생성
Pet()           # 객체 생성 코드   # 인스턴스 선언  #그냥 선언만 해도 됨 # self로 자신의 값 참조
# 클래스로부터 실제 주소값을 가지고 메모리에 올라가 있는 객체(인스턴스) # 실체 # 메모리 내부에서 작동

p = Pet()       # 선언시에 변수에 인스턴스의 주소값을 저장 시킬 수 있고 권장함. # 메모리 외부에서 작동 # p.으로 값 참조

p2 = Pet()      # 또 다른 인스턴스를 선언하고 변수에 저장함.  # 위에서 생성된 인스턴스들과 다른 객체임

 


생성자 (함수) 입니다.  ==> 모든 클래스는 생성자를 갖습니다.
def __init__(self):  형태를 띕니다.  ==> 생성자는 인스턴스 선언시에 함께 호출됩니다.
     pass                                ==> 변수명 = 클래스명() --> 반드시 생성자가 호출됩니다.
인스턴스 변수에 값을 초기화하는 역할을 담당합니다.    (인스턴스 변수 = 인스턴스 선언시 해당 객체에 만들어지는 변수)
self자기자신을 참조하는 값을 의미합니다 ===> java에서 this (클래스 내부에서 자신의 값을 참조)

"""
   생성자 (constructor)
      1) 생성자 (함수)라고 부른다
      2) 정해진 형태가 있다. :

         def __init__(self):        # 모든 클래스는 이런 형태의 생성자를 갖고 있음
            pass

      3) 생성자가 호출되는 시점 ==> 객체 생성시 호출   => 인스턴스 선언
         변수명 = 클래스명()   ==> 클래스명과는 다르지만 객체를 생성하면 반드시 호출됨

      4) 인스턴스 변수에 값을 초기화하는 역할을 담당   (인스턴스 변수 = 인스턴스 선언 될 때, 해당 객체에 만들어지는 변수)

      5) self는 자기 자신을 참조하는 값을 의미
         ==> 자바 언어에서 this,       클래스 내부에서 사용.
"""
class Pet:
   def __init__(self):
      print("self id:", id(self))
      print("생성자 함수")

p = Pet()      # self id: 1480101627264  # 인스턴스 선언(객체 생성)시 무의식적으로 생성자 __init__(self):가 호출됨.
print("p id:", id(p))      # 생성자 함수  # p id: 1480101627264
print("")

p2 = Pet()     # self id: 1480101813984
print("p2 id:", id(p2))    # 생성자 함수  # p2 id: 1480101813984

 


파이썬의 변수 종류에 대해서 짧게 살펴보겠습니다.
크게 4가지, 1) 로컬변수, 2) 인스턴스 변수, 3) 클래스 변수, 4) static 변수로 나뉠 수 있습니다.

1) 로컬 변수는, 함수 내에서 선언된 변수로써 함수 호출시 생성되었다가 종료시 제거됩니다.
용도는 임시 데이터를 저장하기 위함입니다.

2) 인스턴스 변수는, 함수 내에서 self.변수명으로 선언된 변수입니다. 객체 생성시 생성되었다가 소멸시 제거됩니다.
용도는 인스턴스마다 고유 데이터를 저장하기 위함입니다.

3) 클래스 변수함수 밖에서 선언된 변수로써 프로그램이 실행될 때 생성되종료될때 제거됩니다.
용도는 모든 인스턴스에서 공유할 목적입니다.

4) static 변수정적 변수로써 값이 고정되어 변화하지 않는 변수입니다.

"""
   파이썬의 변수 종류 (**********)
      1) 로컬변수        : 함수 내에서 선언된 변수, 함수호출시 생성 ~ 함수 종료시 제거
                           로컬변수 생성 ==> 함수 호출시마다 생성
                           용도 : 임시데이터 저장용
      
      2) 인스턴스 변수    : 함수 내에서 self.변수명으로 선언된 변수, 객체 생성시 인스턴스 변수 생성 ~ 객체 소멸시 제거.
                           인스턴스 변수 생성 ==> 객체 생성(인스턴스 선언)시마다 생성
                           용도 : 인스턴스마다 고유한 데이터(이름, 나이 등) 저장용
      
      3) 클래스 변수      : 함수 밖에서 선언된 변수, 프로그램 실행시 생성 ~ 프로그램 종료시 제거
                           클래스 변수 생성 ==> 프로그램 실행시 생성 ==> 1번만 생성
                           용도 : 모든 인스턴스에서 공유할 목적
                           
      4) static 변수     : 정적 변수  ===> 값이 변경되지 않는 변수
"""
class Pet:                            # 로컬 변수 ==> n과 n2 : 함수 안에서 선언    # 호출시 선언, 종료시 제거
   def __init__(self, n, n2):         # self는 파라미터 변수 카운트에서 제외 (자동 삽입이 되기 때문)
      self.name = n #print("이름:", n)    # (외부에서 오는 인자값에 반응하는 기존의 파라미터가 아닌 내부에서만 동작하기때문)
      self.age = n2 #print("나이:", n2)    # self.변수 ==> 인스턴스 변수   # 인스턴스가 제거될 때(객체소멸시) 없어짐

# 이름 : 야옹이, 나이 2살
p = Pet("야옹이", 2)       # 이름: 야옹이  # 나이: 2
p2 = Pet("멍멍이", 4)      # 이름: 멍멍이  # 나이: 4

#외부 접근 출력 ( p. // 클래스 내부 접근 출력 self. )
print("1. 애완동물명 : {}, 나이 : {}".format(p.name, p.age))
print("2. 애완동물명 : {}, 나이 : {}".format(p2.name, p2.age))

오늘 올린 자료들은 뭔가 많이 부족할 수 있습니다.
일단 올리고 내일부터 새로운 자료들 추가하면서 다시 보고 수정하도록 하겠습니다.

그럼 이만

반응형

'SK 행복성장캠퍼스 > Python 기초' 카테고리의 다른 글

0907_6일차_클래스_메서드  (0) 2020.09.07
0904_5일차_연습문제  (0) 2020.09.07
0904_5일차_함수_유틸리티 함수  (0) 2020.09.07
0904_5일차_함수_람다함수  (0) 2020.09.07
0903_4일차_연습문제  (0) 2020.09.06

댓글