Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- join()
- c#
- 저장소
- thread
- 클래스
- class
- 배열
- synchronized
- Docker Desktop
- 객체
- StringBuilder
- event
- GIT
- Python
- JS
- docker
- Swing
- 자바스크립트
- Java
- 자바
- 파이썬
- SpringBoot
- 프로그래머스스쿨
- 메소드
- JavaScript
- Dict
- SSL
- 스프링부트
- AssertJ
- array
Archives
- Today
- Total
정리노트
[파이썬/python] [클래스] private 변수 / 접근자와 설정자 본문
클래스의 인스턴스 변수를 private 변수로 지정하지 않으면
인스턴스 변수를 외부에서 올바르지 않게 변경할 수 있다.
그래서 변수를 선언할 때 private 변수로 만들어 외부로부터의 접근을 차단할 수 있다.(정보은닉)
추후, 해당 class의 정보에서 age가 아닌 birthday를 저장하기로 정책이 바뀌어서
바꾸려 할 때 class 외부에서 age를 사용하고 있었다면 변경이 불가능해진다.
class Student:
def __init__(self, name = None, age = 0):
self.name = name # 일반 인스턴스 변수 선언
self.__age = age # private 변수 선언 (변수의 이름 앞에 언더바(_)를 두 개 붙임
obj = Student()
print(obj.name) // None
print(obj.__age) // 에러 발생
obj = Student("rolen", 10)
print(obj.name) // rolen
print(obj.__age) // 에러 발생
=============================================================================
class Student:
def __init__(self, name = None, birth = "2022"): # age를 문자열 값을 받는 birth로 교체
self.name = name
self.birth = birth
obj = Student("rolen", 10)
obj.age = 20
print(obj.birth)
// 디폴트로 지정한 "2022"가 아닌 이전 실행에 저장됐던 데이터 10 이 출력된다.
print(obj.age)
// 출력: 20 // 에러는 발생하지 않음
하지만, 정보를 은닉해두고 사용한다면
클래스 내부의 변수 값이 필요해도 접근할 수 없다.
이 경우에는
인스턴스 변수값을 반환하는 '접근자' 와 // 대개 get
인스턴스 변수값을 설정하는 '설정자'를 만든다 // set 을 메소드 이름 앞에 붙인다
def getName(self):
return self.__name
def getAge(self):
return self.__age
def setName(self, name):
self.__name=name
def setAge(self, age):
self.__age=age
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬/python] [클래스] 특수 메소드 (0) | 2022.09.28 |
---|---|
[파이썬/python] [클래스] 클래스변수 (0) | 2022.09.28 |
[파이썬/python] [클래스] 객체생성, 기본원리 연습-정리 (0) | 2022.09.25 |
[파이썬/python] [클래스] 객체 생성, 기본정의 (1) | 2022.09.20 |
[파이썬/python] 리스트와 딕셔너리 비교 (0) | 2022.09.19 |