- Today
- Total
Recent Posts
Recent Comments
Archives
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- selenium
- 알고리즘 강좌
- 쉬운 파이썬
- 알고리즘
- 크롤링
- 대학시험
- c언어
- 프로그래밍
- 파이썬 강좌
- 파이썬 강의
- 셀레니움
- 코딩시험
- 파이썬 자료구조
- 코딩문제
- python 중간고사
- 면접 파이썬
- 파이썬3
- 알고리즘 강의
- Crawling
- gdrive
- 파이썬활용
- 파이썬
- 중간시험
- 채용문제
- 파이썬 알고리즘
- python data structure
- 파이썬 입문
- 자료구조
- 기말시험
- 자료구조 강의
Notice
반원 블로그
01c. 클래스의 Setter, Getter 본문
메소드 Setter, Getter
Setter는 값을 수정하는, Getter는 값을 조회하는 메소드를 말합니다.
클래스로 만든 인스턴스의 속성을 변경하거나 조회 및 삭제를 하려면 메소드를 거치게끔 설계해야합니다. 이는 캡슐화(Encapsulation)와 은닉화(Hidden) 때문인데, 핵심은 "인스턴스 변수를 직접 접근 및 수정을 막고 반드시 메소드를 거치도록하여 클래스 내부의 변수명을 숨기고 데이터 변조 위험성을 낮춘다"입니다.
앞에서 작성했던 코드에서 굳이 메소드를 이용하여 값을 조회하고 수정한 것입니다.
##메소드 사용하여 인스턴스 활용
#1.현재 이름과 키 정보 조회
print("현재 {}의 키는 {}cm 입니다.".format(c1.getName(), c1.getHeight()))
print("현재 {}의 키는 {}cm 입니다.".format(c2.getName(), c2.getHeight()))
#2.키를 성장
c1.growHeight(10) #growHeight 메소드의 매개변수 add값을 10 넣어준다.
c2.growHeight(30) #growHeight 메소드의 매개변수 add값을 10 넣어준다.
클래스 속성과 메소드에 대한 기본 접근 설정
파이썬에서는 다른 프로그래밍 언어와는 다르게 접근지정자(public, private 등)가 없습니다. 파이썬은 기본적으로 인스턴스의 속성에 직접 접근을 허용합니다.
아래 예제는 직접 접근하여 인스턴스 변수 값을 수정하는 방법이며, 우리는 이처럼 직접접근이 수행되지 않도록 다음 목차에서 은닉화를 해보고자 합니다.
막아야될 접근 방법
#03ClassExUseF.py
##상황 : 자라는 아이들의 키를 관리하는 요정의 프로그램
class Child:
#클래스 생성자 정의
def __init__(self, Child_name, Child_height):
self.name = Child_name
self.height = Child_height
#필요한 메소드 구현
def getName(self):
return self.name #이름 정보를 반환
def getHeight(self):
return self.height #키 정보를 반환
def growHeight(self, add):
temp=self.height #임시 지역변수. 성장전 키값 저장
self.height += add
print("성장했습니다.{}->{}".format(temp,self.height)) #성장결과 출력
##메인 코드 영역
#어린이 인스턴스 2개 생성
c1 = Child('Tom',150) #Child_name과 Child_height이 'Tom',150인 어린이 정보를 생성
##메소드 사용하여 인스턴스 활용
#1.현재 이름과 키 정보 조회
print("현재 {}의 키는 {}cm 입니다.".format(c1.getName(), c1.getHeight()))
#2.키를 성장
#c1.growHeight(10) #growHeight 메소드의 매개변수 add값을 10 넣어준다.
c1.height+=10 #키를 증가 시킨다. ->변수에 직접 접근이 허용되있다.
#3.현재 이름과 키 정보 조회
print("현재 {}의 키는 {}cm 입니다.".format(c1.getName(), c1.getHeight()))
출력결과
현재 Tom의 키는 150cm 입니다.
현재 Tom의 키는 160cm 입니다.
###은닉화
클래스에서 사용하는 속성 또는 메소드 앞에 _(언더바 2개)를 붙이면 외부에서 접근하여 사용할 수 없습니다. 비슷한 예로 클래스 생성자 메소드(_init)이 있습니다. 이렇게 하면 속성에 직접 접근할 시 에러가 발생합니다. 공개가 안되있으니 없는 속성이라는 메시지가 나옵니다.
#04ClassExUseT.py
##상황 : 자라는 아이들의 키를 관리하는 요정의 프로그램
class Child:
#클래스 생성자 정의
def __init__(self, Child_name, Child_height):
self.__name = Child_name
self.__height = Child_height
#필요한 메소드 구현
def getName(self):
return self.__name #이름 정보를 반환
def getHeight(self):
return self.__height #키 정보를 반환
def growHeight(self, add):
temp=self.__height #임시 지역변수. 성장전 키값 저장
self.__height += add
print("성장했습니다.{}->{}".format(temp,self.__height)) #성장결과 출력
##메인 코드 영역
#어린이 인스턴스 2개 생성
c1 = Child('Tom',150) #Child_name과 Child_height이 'Tom',150인 어린이 정보를 생성
##메소드 사용하여 인스턴스 활용
#1.현재 이름과 키 정보 조회
print("현재 {}의 키는 {}cm 입니다.".format(c1.getName(), c1.getHeight()))
#2.키를 성장
#c1.growHeight(10) #growHeight 메소드의 매개변수 add값을 10 넣어준다.
c1.__height+=10 #키를 증가 시킨다.
#3.현재 이름과 키 정보 조회
print("현재 {}의 키는 {}cm 입니다.".format(c1.getName(), c1.getHeight()))
출력결과
현재 Tom의 키는 150cm 입니다.
File "파일경로/04ClassExUseT.py", line 32, in <module>
c1.__height+=10 #키를 증가 시킨다.
AttributeError: 'Child' object has no attribute '__height'
위키독스 연재 : https://wikidocs.net/book/2868
'2018~ > 파이썬 자료구조 알고리즘' 카테고리의 다른 글
02. 연결 리스트 (0) | 2019.04.24 |
---|---|
01f. 학습에 도움이 되는 사이트 (0) | 2019.04.23 |
01e. 노드(Node) - 자료구조 기본 단위 (0) | 2019.04.22 |
01d. 재귀호출(순환호출) (0) | 2019.04.21 |
01b. 클래스 기본적인 작성방법 (0) | 2019.04.19 |
01a. 자료구조와 자료형 (0) | 2019.04.18 |
01. 자료구조를 위한 사전지식 (0) | 2019.04.17 |
00. Intro (0) | 2019.04.16 |
Comments