본문 바로가기
프로그래밍, 알고리즘 (Algorithm)

파이썬 캡슐화란? 캡슐화 쉬운 설명

by 뉴디라 2023. 5. 3.

1. 파이썬 캡슐화란?

  • 파이썬 캡슐화는 객체 지향 프로그래밍에서 사용되는 개념으로, 객체의 속성과 메소드를 보호하는 것입니다.
  • 이를 통해 객체의 내부 정보를 안전하게 유지하고 외부에서의 임의적인 접근을 막을 수 있습니다.
 

파이썬 객체지향 프로그래밍, 클래스? 객체? 인스턴스?

1. 파이썬 객체 지향 프로그래밍 파이썬은 객체 지향 프로그래밍(object-oriented programming : OOP) 언어입니다. 이는 객체를 생성하고 조작하는 것이 가능하다는 것을 의미합니다. 객체 지향 프로그래

ai-inform.tistory.com

 

 

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'로 수정하였습니다. 이렇게 클래스 내부의 속성 값을 안전하게 수정할 수 있도록 캡슐화가 구현되어 있습니다.

댓글