일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코드스테이츠
- 빅데이터
- 매일매일
- 주간보고
- Codestates
- python
- 딥러닝
- 선형회귀
- bootcamp
- 노마드코더
- 꾸준히
- SQL
- 파이썬
- 성실히
- Ai
- pandas
- JavaScript
- 코딩테스트
- 2021
- leetcode
- 재미져
- MYSQL
- 부트캠프
- yolo
- selenium
- 리뷰
- 독서
- 기초통계
- 자료구조
- 열심히
- Today
- Total
코딩일기
[PYTHON 5] 객체지향 프로그래밍 {abstract , encapsulation}(feat. Codestates _AI_BootCamp, 부트캠프) 본문
[PYTHON 5] 객체지향 프로그래밍 {abstract , encapsulation}(feat. Codestates _AI_BootCamp, 부트캠프)
daje 2021. 3. 13. 17:34
안녕하십니까 다제입니다.
저희는 파이썬의 객체지향 시리즈를 다루고 있습니다.
오늘은 추상화(abstract class)와 캡슐화를 같이 공부해보고자 합니다.
저희는 핸드폰을 얼마나 알고 사용하고 있을까요?
어떻게 데이터를 주고 받고 인터넷을 연결하며,
우리가 말하는 내용을 어떻게 변환하며,
상대방에게 어떻게 전달해주는지 여러분은 알고 있나요?
더 중요한 것은 이것을 모르면 핸드폰을 사용할 수 없나요???
그렇지 않습니다.
추상화란 이처럼 프로그래머들이
특정 코드를 사용할 때 필수적인 정보 외 나머지 세부사항을 보이지 않도록 처리하는 것을 의미합니다.
정말 충격적인 것을 말씀드리겠습니다.
변수에 값을 저장하는 것, 함수, 메소드, 클래스를 생성하는 것도 추상화에 해당 됩니다.
여러분은 이미 추상화를 하고 있으셨던 거죠! 훗!
이러한 추상화는 다른 사람들이 함부로 접근하지 못하도록 제한하는 암호학적 의의와
쉽게 사용할 수 있는 편의성도 제공하는 의의를 지니고 있습니다.
그럼 이제부터 본격적으로 추상화를 어떻게 하는지 알아보도록 하겠습니다.
1. 추상화(abstract class)
1) 추상화란?
-. 특정 코드를 사용할 때 필수적인 정보 외 나머지 세부사항을 보이지 않도록 처리하는 것을 의미합니다.
2) 추상화를 잘 하려면
-. 변수, 함수, 클래스의 이름을 명확하게 짓는 것이 중요합니다.
-. docstring(documentation string)을 통해 꼭 필요한 추가적인 정보를 제공한다.
* docstring 적는 방법 : """내용"""
* docstring 기재 위치 : 클래스, 함수, 바로 아래 줄
* docstring 보는 방법 : help(함수명)
2. 캡슐화(Encapsulation)
1) 캡슐화란?
-. 객체의 속성과 그것을 사용하는 행동을 하나로 묶는 것
-. 객체의 일부 구현 내용에 대한 외부로부터의 직접적인 액세스를 차단하는 것
* Class 외부에서 접근 할 수 없도록 하는 것
2) 캡슐화 방법
-. __를 변수, 메소드 앞에 기재하여 캡슐화합니다.
-. 그러나, 아에 접근 할 수 없다면 안되겠죠? 변수에 접근하는 통로를 함수로 정의해주어서 함부로 접근할 수 없도록 설정하는 것과 이렇게 접근 할 수 있는 통로들을 묶어주는 것도 캡슐화라고 합니다.
-. 여기서 통로들을 묶어준다 것을 예를 들어서 설명드리겠습니다.
-. 주민등록번호와 나이를 다루는 class가 있다고 가정해보겠습니다.
-. 주민등록번호는 수정이 되거나, 접근을 하면 안되겠지요? 그러니까 사용자가 입력한 정보가 맞는지 아닌지 정도만 확인하는 함수를 만들어 줍니다.
-. 그런데 나이같은 경우는 변경이 되어야하는 정보입니다. 이에, 캡슐화된 이 함수에 접근할 수 있는 getter와 setter를 사용하여 접근이 가능하도록 만들어주는 것을 "통로들을 묶어준다"의 개념입니다.
* 캡슐화되어 있는 변수의 값을 읽는 메소드를 getter메소드,
* 캡슐화되어 있는 변수의 값을 설정하는 메소드를 setter메소드
※ setter메소드에는 점검하는 코드를 추가하는 것을 권장드립니다.
자! 그런데 __를 앞에 붙히면 파이썬 내부에서는 어떠한 일이 이루어지길래 Class 외부에서 접근 할 수 없는 것일까요?
dir()라는 내장함수를 아실 것입니다. dir()로 변수 앞에 __를 붙힌 녀석을 검색하여 보면
_클래스명__변수명 이런식으로 검색이 되실 것입니다.
사실 변수나 메소드 이름 앞에 밑줄 두 개(__)를 쓰면, 파이썬은 그 앞에 추가적으로 "_클래스 이름" 을 덧붙여서 이름을 바꿔버립니다. 이걸 파이썬에서는 네임 맹글링(name mangling)이라고 합니다. 맹글링(mangling)의 동사형인 맹글(mangle)은 영어로 "마구 썰다", "엉망진창으로 만들다"라는 뜻입니다. 여기서는 이름을 새로운 형태로 변환하는 것을 맹글링이라고 하는 겁니다. 그러니까 방금 보신 것처럼
- __age는 _User__age로,
- __resident_id는 _User__resident_id로
바뀌는 겁니다.
이처럼 캡슐화를 하여도 접근이 가능하기 때문에 파이썬 개발자들은 개발자들끼리 소통하기 위해 __대신 _로 캡슐화를 진행합니다.
@property -> getter 메소드
@변수명.setter -> setter 메소드
클래스를 만드는 개발자는 필요한 메소드를 모두 미리 준비해두고
클래스를 사용하는 개발자는 변수로 바로 접근하기 전 관련된 메소드가 있는지 확인해야 합니다.
변수를 직접 접근하여 사용하는 것을 최소화하는 습관을 드려야한다고 합니다.
오늘은 추상화(abstract class)와 캡슐화를 같이 공부해보았습니다.
다음포스팅에서는 상속에 대해 집중적으로 알아보고 다항성에 대해서 알아보도록 하겠습니다.
오늘도 방문해주셔서 감사드립니다.