1. 파이썬 캡슐화란?
- 파이썬 캡슐화는 객체 지향 프로그래밍에서 사용되는 개념으로, 객체의 속성과 메소드를 보호하는 것입니다.
- 이를 통해 객체의 내부 정보를 안전하게 유지하고 외부에서의 임의적인 접근을 막을 수 있습니다.
2. 파이썬 캡슐화의 목적 및 필요성
- 파이썬 캡슐화의 목적은 객체 지향 프로그래밍에서 객체의 내부 정보를 보호하는 것입니다.
- 캡슐화는 객체의 속성과 메소드를 외부에서 접근하지 못하도록 제한함으로써 객체의 일관성과 안정성을 유지하고, 유지보수성을 높입니다. 이를 통해 코드의 안정성과 신뢰성을 높일 수 있습니다.
- 또한, 캡슐화는 객체 간의 결합도를 낮추어 유지보수를 용이하게 합니다. 객체 내부의 속성과 메소드를 외부에서 직접 접근하는 것을 막음으로써, 다른 객체와의 결합도를 줄일 수 있습니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다.
- 마지막으로, 캡슐화는 정보은닉을 가능하게 합니다. 객체의 내부 정보가 외부로 노출되지 않음으로써, 객체를 보호하고 객체의 정보를 숨길 수 있습니다. 이를 통해 객체의 보안성을 높이고, 객체 간의 상호작용을 안전하게 보호할 수 있습니다.
3. 파이썬 캡슐화의 예시 및 코드
- 예를 들어, 학생 클래스를 만든다고 가정해봅시다.
- 이 클래스에는 학생의 이름, 학번, 성적 등의 속성이 있을 것입니다. 이때, 속성에 외부에서 직접적으로 접근하는 것을 막기 위해, 속성을 private으로 선언하고, 속성에 접근하는 메소드를 클래스 내부에 만들어줄 수 있습니다.
class Student:
def __init__(self, name, student_id, grades):
self.__name = name
self.__student_id = student_id
self.__grades = grades
def get_name(self):
return self.__name
def get_student_id(self):
return self.__student_id
def get_grades(self):
return self.__grades
def set_name(self, name):
self.__name = name
def set_student_id(self, student_id):
self.__student_id = student_id
def set_grades(self, grades):
self.__grades = grades
- 위의 예시에서는 __를 변수명 앞에 붙여서 속성을 외부에서 접근하지 못하도록 private으로 만들었고, 이에 해당하는 값을 반환하는 getter 메소드와 값을 수정하는 setter 메소드를 만들어주었습니다.
- 이렇게 속성 이름에 언더스코어 두 개를 붙이면 외부에서 직접적인 접근이 불가능하고, 클래스 내부에서만 접근 가능하도록 캡슐화됩니다.
- 이렇게 하면 외부에서는 속성에 직접 접근할 수 없으며, 메소드를 통해서만 속성에 접근할 수 있습니다. 이를 통해 학생 클래스의 일관성과 안정성을 유지하고, 유지보수성을 높일 수 있습니다.
- 또한, 위 예시의 Student 클래스는 getter와 setter 메소드를 갖고 있습니다.
- getter 메소드는 클래스 내부의 속성 값을 반환하며, setter 메소드는 클래스 내부의 속성 값을 수정합니다. 이렇게 getter와 setter 메소드를 통해, 클래스 내부의 속성 값을 안전하게 읽고 수정할 수 있습니다.
- 예를 들어, Student 클래스의 인스턴스 s를 생성하고, 이 인스턴스의 이름을 'Alice'로 설정하고자 한다면, 다음과 같이 코드를 작성할 수 있습니다
s = Student('Bob', '20210001', [85, 90, 80])
s.set_name('Alice')
- 위 코드에서 set_name 메소드를 사용하여 s 인스턴스의 이름을 'Alice'로 수정하였습니다. 이렇게 클래스 내부의 속성 값을 안전하게 수정할 수 있도록 캡슐화가 구현되어 있습니다.
반응형
'프로그래밍, 알고리즘 (Algorithm)' 카테고리의 다른 글
파이썬 리스트 축약이란? 리스트 축약 (List Comprehension) 쉬운 설명 (0) | 2023.05.17 |
---|---|
파이썬 객체지향 프로그래밍, 클래스? 객체? 인스턴스? (0) | 2023.04.24 |
이분탐색이란? 이분탐색(이진탐색) 매우 쉬운 설명 (2) | 2023.04.12 |
API란? API가 뭐야? API 매우 쉬운 설명 (0) | 2023.04.11 |
빅오표기법이란? 알고리즘 빅오표기법 쉬운설명 (0) | 2023.04.05 |
댓글