Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 클래스의 게터(Getter)와 세터(Setter)란 무엇일까?

게터(Getter)와 세터(Setter)란?

게터와 세터는 많은 객체 지향 프로그래밍 언어에서 데이터 캡슐화(data encapsulation) 원칙을 지키기 위해 사용되는 메서드입니다. 이들은 '뮤테이터(mutator) 메서드'라고도 불립니다.

데이터 캡슐화란 데이터를 그 데이터를 다루는 메서드와 함께 하나의 단위로 묶는 것을 의미합니다. 여기서 메서드란 데이터를 읽어 오는 게터(getter)와 데이터를 변경하는 세터(setter)를 가리킵니다. 이 원칙에 따르면 클래스의 속성(attribute)은 외부 코드로부터 숨기고 보호하기 위해 private으로 선언됩니다.

파이썬에서의 올바른 접근 방식

안타깝게도 "올바른 파이썬 클래스는 반드시 게터와 세터로 private 속성을 캡슐화해야 한다"는 생각이 널리 퍼져 있습니다. 하지만 게터와 세터를 일일이 작성하는 방식은 간결하지도 우아하지도 않습니다.

파이썬다운(pythonic) 방식은 프로퍼티(property)를 활용하는 것입니다. 값을 가져오는 메서드에는 @property 데코레이터를 붙이고, 세터 역할을 하는 메서드에는 @x.setter 데코레이터를 붙이면 됩니다.

예제

게터와 세터를 활용한 예제는 다음과 같습니다.

class P:
    def __init__(self, x):
        self.__set_x(x)

    def __get_x(self):
        return self.__x

    def __set_x(self, x):
        if x < 0:
            self.__x = 0
        elif x > 1000:
            self.__x = 1000
        else:
            self.__x = x

    x = property(__get_x, __set_x)

위 예제에서 x = property(__get_x, __set_x)는 게터와 세터를 하나의 프로퍼티로 연결합니다. 덕분에 외부에서는 p.x처럼 일반 속성에 접근하듯 값을 읽고 쓸 수 있으면서도, 내부적으로는 0 미만의 값은 0으로, 1000을 초과하는 값은 1000으로 제한하는 유효성 검사가 자동으로 수행됩니다. 이처럼 프로퍼티를 사용하면 캡슐화의 장점을 유지하면서도 훨씬 깔끔하고 직관적인 코드를 작성할 수 있습니다.