Python Class and Access Modifier

Python Class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Account:
# constructor
# 객체를 생성할 때 "반드시" 한 번 호출한다.
def __init__(self, cus_name, init_balance):
# instance member
self.name = cus_name
self.balance = init_balance

# descructor
# 객체가 소멸될 때 "반드시" 한 번 호출
def __del__(self):
pass

# instance method(operator)
def deposit(self, money):
if money < 0:
print('0보다 작은 값을 저금할 수 없습니다.')
return False

self.balance += money
print(f'잔고 {self.balance}')
return True

def withdraw(self, money):
if money > self.balance:
print('잔고보다 출금하려는 돈이 더 많습니다.')
return False

self.balance -= money
print(f'잔고 {self.balance}')
return money

def transfer(self, other, money):
self.balance -= money
# 다른 object의 member에 바로 접근하지 않는다!! (private없어서 접근 할 수는 있음(뭐임?))
# 다른 object의 member는 "반드시" 상대 object의 method를 호출해서 접근해야 한다. - Message Passing
other.deposit(money)
print(f'잔고 {self.balance}')

Object : abstraction method (추상화 도구)

  • 관련 있는 변수(member)와 기능(operator, method)를 묶어서 하나의 object로 만든다.
  • Operator를 통해서만 member에 접근할 수 있다.

Class와 Instance, object의 차이

  • 클래스(class)란 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계 도면 같은 것이고(과자 틀), 객체(object)란 클래스에 의해서 만들어진 피조물(과자틀에 의해서 만들어진 과자)을 뜻한다.
  • class에 의해서 만들어진 Object를 instance라고도 한다. 그렇다면 Object와 Instance의 차이는 무엇일까?
    이렇게 생각해 보자. a = Cookie() 이렇게 만들어진 a는 Object이다. 그리고 a라는 Object는 Cookie의 Instance이다.
  • 즉, Instance라는 말은 특정 Object(a)가 어떤 Class(Cookie)의 객체인지를 관계 위주로 설명할 때 사용된다. 즉, “a는 instance” 보다는 “a는 object”라는 표현이 어울리며, “a는 Cookie의 object” 보다는 “a는 Cookie의 instance”라는 표현이 훨씬 잘 어울린다.

Public, Private and Protected | Python Access Modifier

C++, Java와 같이 클래식한 object-oriented 언어에서는 public, private, protected와 같은 키워드로 class의 member에 대한 접근을 제어한다. Class의 Private member는 class 외부에서 접근이 불가능하며 class 내부에서만 접근될 수 있다.

Class 내의 Public member는 class 외부에서도 접근할 수 있다. 같은 class의 object는 public method를 호출하도록 요구된다. Private instance variable과 public method를 함께 써야지만 데이터 encapsulation의 원칙에 따르는 것이다.

Class의 protected member는 오직 해당 class와 그 class를 상속받은 child class만이 접근할 수 있다. 이는 parent class가 child class에게 특정한 리소스를 상속할 수 있게 한다.

그런데 Python은 instance variable과 method에 대해서 접근 제한을 하는 방식이 따로 없다. Python vaiable이나 method의 이름 앞에 한개 또는 2개의 _(underscore)를 붙여서 protected와 private으로 구분하기로 약속한다.

Public Attributes

1
2
3
4
5
class Account:
def __init__(self, cus_name, init_balance):
# instance member
self.name = cus_name
self.balance = init_balance

Protected Attribute

1
2
3
4
5
class Account:
def __init__(self, cus_name, init_balance):
# instance member
self._name = cus_name
self._balance = init_balance

Private Attribute

1
2
3
4
5
class Account:
def __init__(self, cus_name, init_balance):
# instance member
self.__name = cus_name
self.__balance = init_balance

그런데 웃긴 건, underscore로 name mangling한 private variable을 class 외부에서 접근이 가능하다는 것이다. 다음의 방법을 사용하면 된다.

1
2
myAccount = Account('subin', 10000)
myAccount._Account__balance

정말 필요하다면 접근할 수 있지만, Python에서는 접근하지 말 것을 권고하고 있다.


참고 자료

Python Data Type and Data Structure | Jupyter 사용방법

Jupyter 사용법 | Python Data Type

Jupyter notebook

  1. window 사용을 기준으로 Window PowerShell을 실행한다.

  2. pwd로 현재 폴더를, ls로 현재 폴더에 존재하는 file들을 확인 후 mkdir 폴더이름 command로 python file을 만들고 실습할 폴더 하나를 생성한다.

  3. 나는 python-basic이라는 폴더를 만들고 cd python-basic 명령으로 해당 폴더로 이동했다.

  4. 만든 폴더로 이동한 후 cmd에 jupyter notebook command를 입력한다.

    PowerShell에 jupyter notebook 입력

  5. 조금 기다리다보면 (10초 이상 소요) 브라우저 새 창으로 jupyter notebook이 실행된다.

    jupyter notebook 실행화면

  6. 그림과 같이 우측의 new button을 눌러 새로운 python file을 생성한다.

    create new python file

  7. 그럼 새로운 탭에 생성된 file이 보여진다.

    untitled.ipynb

  8. 제목을 수정하고 실습을 시작하면 된다!

  • method 이름을 치고 Shift + Tab을 하면 function의 signature를 확인할 수 있다.

    function signature 확인 단축키 : shift + tab

  • object (variable)을 입력한 상태에서 Tab 키를 누르면 사용 가능한 method들을 확인할 수 있다.

    method 확인 단축키 : tab

  • instruction을 작성한 후 Shift + Enter를 누르면 해당 line이 실행된다.

  • 어떤 line에 focus가 있는 상태에서, ESC + m을 누르고 Enter를 치면 markdown으로 작성할 수 있다.

Python Data Type

  1. Number Type : Int, Float

    Python Number Type

    javaScript와 다르게 C처럼 int, float등 정수형과 실수형을 구분한다.

  2. String

  • character와 string의 구분 없이 str type을 가진다.

String

Python Data Structure

Mutable and Immutable Object

Mutable object (변경 가능 객체)

  1. list
  2. dictionary
  3. set

Immutable object (변경 불가능 객체)

  1. int, float 등 숫자는 immutable : 값을 덮어쓰는 것이 아니라 새로운 memory 공간에 할당하고 그 값을 가리킨다. 이름 객체가 값 객체를 가리키는 것을 binding이라고 한다.
  2. string
  3. Tuple

Dynamic Typing

Dynamic Typing

Python은 Dynamic typing 언어로, C / C++ 같은 정적 타이핑 언어처럼 자료형을 미리 선언하지 않아도 알아서 동적으로 자료형을 할당할 수 있다.

Data Assignment

Memory Assignment (C / Python)

  • C : char a = 10;
    • A라는 이름을 가진 공간에 10의 값이 저장된다.
    • 20으로 변경시 같은 메모리 공간의 값을 변경한다.
  • Python : a = 10;
    • 10이라는 값을 가진 객체가 생기고, a라는 이름을 가진 객체가 10을 가리키게 된다.
    • 만약 a=20으로 재할당할 경우 20이라는 값을 가진 객체가 생기고 a는 20을 가리켜, 10은 자신을 가리키는 객체가 없으므로 제거된다.
    • 20으로 변경시 10의 메모리공간을 건드리지 않고 새로운 공간을 만든다.
  • Integer, float등 number type은 immutable 객체

Python 성질

  1. 모든 것이 객체
    : integer가 그냥 4 byte가 아니라 객체로 필요한 것들이 붙어있어 크기를 더 차지함
  2. Overflow
    : overflow 되는 대신 4 byte를 8 byte로 늘림. 대신 경계검사 하므로 속도 저하

Language Abstraction

  • Hardware 의존적인 Assembly 언어에서 벗어나 하드웨어 독립적인 C언어로 Coding하고 각 하드웨어 별 어셈블러로 해석하게끔 함 ▶ 하드웨어 추상화 (각 어셈블러가 어떻게 동작하는지 몰라도 C로 코딩하면 됨)
  • Assembly : low level language
  • C / C++ : hardware abstraction 됐으나 memory abstraction X ▶ 메모리를 직접 할당, 해제
  • Java / C# : 언어 자체에서 메모리 할당, 해제 ▶ garbage collection. Memory abstraction O 그러나 Data Type은 선언해줘야함
  • Python / javaScript : Data type abstraction. Interpreter Language
  • Level은 abstraction level을 말하는 것이지 급을 나누는 것이 아님
  • 성능은 C/C++ 생산성은 Python

Python 3.7.3 | Jupyter 설치

Window Python 3.7.3 및 Jupyter 설치

파이썬을 공부하기 위해 작업환경을 우선 구축하기로 한다.

Python 3.7.3 설치

  1. Python 최신 릴리즈인 3.7.3 다운로드 페이지로 이동한다.

www.python.org/download

  1. Download for Windows의 Python 3.7.3 버튼을 누르면 자동으로 설치 실행 파일이 다운로드 된다.

  2. 다운받은 python-3.7.3.exe 파일을 관리자 권한으로 실행 후, 설치를 진행한다. PATH를 자동으로 생성하는 것이 좋다!

  3. 다운로드가 완료되면 cmd 창을 열어 python --version 명령어로 설치가 제대로 되었는지 확인한다.

    python 설치 확인

Jupyter 설치

위의 Python 설치 4단계에서, cmd 명령으로 확인을 정상적으로 마쳤다면 추가적인 명령 한 줄로 Jupyter를 설치할 수 있다.

  1. cmd 창에 pip install jupyter를 입력한다.
    jupyter 설치

여기까지 하면 Python 사용을 위한 간단한 작업 환경 구성이 완료된다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×