본문 바로가기
python

pyhthon - 인캡슐레이션Encapsulation(캡슐화)

by orangecode 2022. 4. 28.
728x90
인캡슐레이션(캡슐화)

캡슐화(출처 : 생활코딩)

좋은 부품이란?

왼쪽 < 오른쪽

- 왼쪽 : 매우 복잡해서 여러가지 외부 요인에 의해 오동작할 가능성이 큼

- 오른쪽 : 부품의 내부적인 것들을 견고한 케이스로 감싸고 있어, 외부적인 요인에 영향을 받지 않음.

 

 

※ 캡슐화Encapsulation(케이스를 씌운다) :

외부의 영향을 최소화하고, 부품이 잘 동작할 수 있도록 한다.

 

객체 내부에 포함되어 있는 여러가지 것(데이터 등)들이

외부로부터 영향을 받지 않도록 하는 프로그래밍적 기능, 기법을 말한다.

 

캡슐화의 목적

1. 코드를 재수정 없이 재활용 할 수 있다.

2. 접근 제어자를 통한 정보은닉이 가능하다.

 

객체 지향 프로그래밍에서는 캡슐화를 통해 

객체가 외부에 노출되면 안되는 정보/기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하도록 할 수 있는데, 코드의 수정이 일어날 때 관련있는 객체만 수정하면 되기에 영향 범위를 예측하기 좋다.

 

또한 관련된 기능/특성을 한 곳에 모아 분류하기 때문에, 객체 재활용이 원할하다.

 

객체 지향 프로그래밍에서는 기능과 특성의 모음을 [클래스]라는 [캡슐]분류해서 넣는 것 캡슐화이다.

객체가 맡은 역할을 수행하기 위한 하나의 목적으로 묶는 것이다.

 

 

 

 

데이터 vs 로직

 

하드디스크(왼쪽) vs cpu(오른쪽)

 

하드디스크 내부에 있는 정보(데이터)가 담겨있다면, 하드디스크의 가치가 달라질 수 있다.

 

-> 데이터는 소중하다

 

-> 변수는 소중하다.

 

-> 변수가 외부의 영향을 받지 않도록 해야한다.


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 밖에서는 접근할 수는 없지만 내부에서의 접근은 가능하다.

 

 

반응형

댓글