인캡슐레이션(캡슐화)
좋은 부품이란?
왼쪽 < 오른쪽
- 왼쪽 : 매우 복잡해서 여러가지 외부 요인에 의해 오동작할 가능성이 큼
- 오른쪽 : 부품의 내부적인 것들을 견고한 케이스로 감싸고 있어, 외부적인 요인에 영향을 받지 않음.
※ 캡슐화Encapsulation(케이스를 씌운다) :
외부의 영향을 최소화하고, 부품이 잘 동작할 수 있도록 한다.
객체 내부에 포함되어 있는 여러가지 것(데이터 등)들이
외부로부터 영향을 받지 않도록 하는 프로그래밍적 기능, 기법을 말한다.
캡슐화의 목적
1. 코드를 재수정 없이 재활용 할 수 있다.
2. 접근 제어자를 통한 정보은닉이 가능하다.
객체 지향 프로그래밍에서는 캡슐화를 통해
객체가 외부에 노출되면 안되는 정보/기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 할 수 있는데, 코드의 수정이 일어날 때 관련있는 객체만 수정하면 되기에 영향 범위를 예측하기 좋다.
또한 관련된 기능/특성을 한 곳에 모아 분류하기 때문에, 객체 재활용이 원할하다.
객체 지향 프로그래밍에서는 기능과 특성의 모음을 [클래스]라는 [캡슐]에 분류해서 넣는 것이 캡슐화이다.
객체가 맡은 역할을 수행하기 위한 하나의 목적으로 묶는 것이다.
데이터 vs 로직
하드디스크 내부에 있는 정보(데이터)가 담겨있다면, 하드디스크의 가치가 달라질 수 있다.
-> 데이터는 소중하다
-> 변수는 소중하다.
-> 변수가 외부의 영향을 받지 않도록 해야한다.
class C:
def __init__(self, v):
self.value = v
def show(self):
print(self.value)
c1 = C(10)
print(c1.value)
#value 값 변경
c1.value = 20
print(c1.value)
c1.show()
set/get method
class Cal(object):
def __init__(self, v1, v2): # v1, v2 : __init__내부에서만 사용가능한 지역변수
if isinstance(v1, int): # isinstance : 매개변수 v1이 int 값인지 알아보는 함수
self.v1 = v1
if isinstance(v2, int):
self.v2 = v2
def add(self):
return self.v1 + self.v2
def subtract(self):
return self.v1 - self.v2
def setV1(self, v):
if isinstance(v, int): # v=int 값인지 확인 True라면 실행, False 라면 무시
self.v1 = v
def getV1(self):
return self.v1
c1= Cal(10,10)
print(c1.add())
print(c1.subtract())
c1.setV1('one')
c1.v2 = 30
print(c1.add())
print(c1.subtract())
isinstance() 함수 : 매개변수의 값이 맞는지 확인하는 함수
- isinstance(v1, int) : 매개변수 v1이 int 값인지 알아보는 함수, True라면 실행, False 라면 무시
c1.setV1('one')은 string(문자열) 값이라서 False로 무시되었다.
class C:
def __init__(self, v):
self.__value = v # '__'를 변수 앞에 붙이게되면 instance 밖에서 접근할 수 없는 상태가 된다.
def show(self):
print(self.__value)
c1 = C(10)
print(c1.__value())
__value : '__'를 변수 앞에 붙이게되면 instance 밖에서 접근할 수 없는 상태가 된다.
class C:
def __init__(self, v):
self.__value = v # '__'를 변수 앞에 붙이게되면 instance 밖에서 접근할 수 없는 상태가 된다.
def show(self):
print(self.__value)
c1 = C(10)
c1.show()
instance 밖에서는 접근할 수는 없지만 내부에서의 접근은 가능하다.
'python' 카테고리의 다른 글
python - Class member, Class method (0) | 2022.04.29 |
---|---|
python - 상속(inheritance) (0) | 2022.04.28 |
python - 객체 지향 프로그래밍(Object Oriented Programming) (0) | 2022.04.27 |
python - 모듈(modules)란? (0) | 2022.04.27 |
python - function 함수란 무엇인가? (0) | 2022.04.27 |
댓글