제수기 - 제발 수업내용을 기억해라 / 단순수업정리 시리즈
Object-Oriented Program 객체 지향 프로그래밍
- 객체(object)를 중심으로 프로그램을 작성하는 패러다임
- 변수(속성)-함수(메소드)를 클래스라는 단위로 작성하고, 이를 객체화(인스턴스 instance)하는 것.
클래스 속성과 인스턴스 속성
인스턴스 속성
: 인스턴스마다 달라져야 할 값을 가진 속성 (person.name
,person.age
,person.address
, ...)클래스 속성
: 인스턴스 간에 공유되는 속성(person.nationality
, ...)
cls는 메모리에 적재된 class 객체에 대한 참조
- 캡슐화
- 속성/메소드(함수) 묶어서 선언하고
- 속성의 직접적인 접근을 막고, 메소드를 통한 사용만 허용하는 것이 캡슐화의 의미.
__private
변수를 선언해서 속성의 직접적인 접근을 막고, 제공된 메소드를 통한 사용만 허용.- 캡슐화 원칙을 잘 지켰다면, 주요한 데이터가 외부로 노출되지 않는 은닉화 효과까지 얻게 된다.
import account
- 캡슐화를 진행하면,
private
속성을 외부에서 직접 접근할 수 없게 된다.- private 속성을 외부에서 사용하기 위한 메소드로
getter/setter
를 제공할 수 있다.
getter
: 속성을 가져오기 위한 메소드 (읽기)
setter
: 속성을 설정하기 위한 메소드 (쓰기)
class Acoount:
def __init__(self, name, balance):
self.__name = name
self.__balance = balance
def info(self):
return f'{self.__name}님의 현재 잔액은 {self.__balance}원입니다.'
def deposit(self, money):
# 유효성 검사
if money > 0:
self.__balance += money
print('입금이 정상적으로 처리되었습니다.')
print(self.info())
else:
print('입금액이 유효하지 않습니다.')
def withdraw(self, money):
if money < 0:
print('출금액이 유효하지 않습니다.')
elif money > self.__balance:
print('잔액이 부족합니다.')
else:
self.__balance -= money
print(self.info())