DINO NET
(23.02.03) 객체 지향 프로그래밍 기본 개념 2. 캡슐화(Encapsulation) 본문
캡슐화(Encapsulation)
1. 객체의 일부 구현 내용에 대한 외부로부터의 직접적인 액세스를 차단하는 것.
2. 객체의 속성과 그것을 사용하는 행동을 하나로 묶는 것.
1. 객체의 일부 구현 내용에 대한 외부로부터의 직접적인 액세스를 차단하는 것.
: 변수, 메소드명 앞에 언어바 두 개 (__)를 쓰면 "클래스 외부" 에서 사용하지 못한다.
class Citizen:
"""주민 클래스"""
drinking_age = 19 # 음주 가능 나이
def __init__(self, name, age, resident_id):
"""이름, 나이, 주민등록번호"""
self.name = name
self.__age = age
self.__resident_id = resident_id
human1 = Citizen("김아무개", 35, "29384")
print(Citizen.name) #김아무개
print(Citizen.__resident_id) #error
외부에서 접근이 불가능하므로 내부에서 접근하는 메소드를 만들어 이끌어낼 수 있다.
2. 객체의 속성과 그것을 사용하는 행동을 하나로 묶는 것.
__변수는 그에 접근하는 통로를 메소드로 제한했으므로 속성과 행동을 하나로 묶은 것이다.
class Citizen:
"""주민 클래스"""
drinking_age = 19 # 음주 가능 나이
def __init__(self, name, age, resident_id):
"""이름, 나이, 주민등록번호"""
self.name = name
self.__age = age
self.__resident_id = resident_id
def get_age(self):
return self.__age
def set_age(self, new_age):
if 0 <= new_age:
self.__age = new_age
else:
print("나이는 음수 값이 될 수 없습니다. 0으로 초기화 합니다.")
self.__age = 0
human1 = Citizen("김아무개", 35, "29384")
print(human1.get_age()) #35
human1.set_age(38)
print(human1.get_age()) #38
캡슐화된 변수 값을 읽는 메소드를 getter 메소드라 하고
캡슐화된 변수 값을 설정하는 메소드를 setter 메소드라 한다.
*setter 메소드에서 값에 대한 제한을 넣는 것이 좋다.
*모든 정보를 getter와 setter 메소드를 설정하지 않는다. 위 예시에서 __resident_id와 같은 경우에는 민감한 정보이므로 사용하지 않는 것이다.
def identify(self, value):
if self.__resident_id == value:
print("{}님 확인되었습니다.".format(self.name))
else:
print("주민등록번호가 일치하지 않습니다.")
위 예제와 같이 다른 메소드를 통해 사용이 가능한데, 이곳에서도 __resident_id 값은 여전히 캡슐화된 상태이다.
-> 변수에 간접할 수 있는 메소드는 getter / setter / 그 외 다른 메소드가 있는 것이다.
'program() > 파이썬' 카테고리의 다른 글
| (23.02.06) 객체 지향 프로그래밍 기본 개념 4. 다형성(Polymorphism) (0) | 2023.02.06 |
|---|---|
| (23.02.03) 객체 지향 프로그래밍 기본 개념 3. 상속(Inheritance) (0) | 2023.02.03 |
| (23.02.02) 객체 지향 프로그래밍 기본 개념 1. 추상화(Abstraction) (0) | 2023.02.02 |
| (23.02.01) 실습 (0) | 2023.02.02 |
| (23.01.08) 객체 타입, 객체 지향 / 절차 지향 (0) | 2023.01.18 |