프로그래밍/Python

python에서 객체 지향 이야기( 캡슐화 )

seungdols 2015. 7. 23. 00:55



파이썬에서 클래스 작성시 def __init__은 클래스를 객체로 만드는 중요한 함수입니다.

꼭! 만드셔야 합니다. 그리고 파이썬의 함수는 self라는 매개변수를 추가 해주어야 합니다. 


왜? 인지는 나중에 말씀드리겠지만, 지금은 무조건 추가!만 기억하시면 됩니다.


파이썬의 경우 9번 라인 처럼 c1.value를 통해 클래스 인스턴스 변수에 접근이 가능합니다.


이것은 중요한 차이가 존재 합니다. 왜냐하면 객체 지향 방법론에서는 캡슐화를 보장하는 것이 좋기 때문입니다.


캡슐화는 클래스를 포장하는 것을 말 합니다. 즉, 클래스라는 상자에 변수, 함수가 있더라도 사용자는 직접적인 접근을 허용 하는 건 불필요하다는 사실이죠. 왜냐? 변수에 접근만 하는 함수를 별도로 작성 하기 때문입니다.


그러나 , 파이썬의 경우 언어적인 측면에서

인스턴스 변수에 접근 하는 것을 허용한다는 사실이지만,

보통은 아래쪽처럼 사용하는 방법으로 쓰는 것이 좋습니다. (파이썬의 미덕이라고 볼 수 있죠)

짧은 코드의 경우 get/set 메소드를 작성하는 것 자체가 불필요함 일 수 있습니다. 






결론적으로는 위의 코드와 아래의 코드가 같습니다.

그러나, 코드가 많아 질 경우 위와 같다면, 어떤 작업인지 알 수 있을까요?

위 코드처럼 직접적인 접근을 허용하는 방식으로 사용하면,

어디서 값이 변경 되는지 찾기가 어렵습니다.


여기저기서 값을 변경 한다면, 오류가 발생 했을 경우에 어디서 어떻게 찾을까요?

그러나 get/set 함수를 통한 값의 변경은 오류를 찾기 쉽습니다.

왜냐면 함수안에 다른 코드를 넣기 쉽다는 점과

일괄적으로 코드가 변경 된다는 점입니다.

예로 get/set 함수 내에서 print를 한다면,

그럼 어디서 값이 변동 되는지 즉각적으로 코드 전체에 반영이 되는 거죠 !

만약 모든 코드에서 직접 접근을 하면 그 코드 앞 뒤로 출력문을 한땀 한땀 써주어야 합니다.

불편함을 덜어주는 것이 프로그래밍의 기본이라고 생각합니다.


반응형

'프로그래밍 > Python' 카테고리의 다른 글

Python class의 멤버에 관한 이야기 1  (0) 2015.07.28
python 에서 상속 이야기  (0) 2015.07.24
CSV 파일을 읽어보자!  (0) 2015.06.06
wxPython 좀 더 알아보자.  (0) 2015.03.27
Python GUI 프로그래밍 시작  (0) 2015.03.27