[파이썬] 접근자(getter)와 설정자(setter)

Python은 객체 지향 프로그래밍 언어로, 클래스를 통해 데이터와 데이터를 다루는 메소드를 함께 묶을 수 있습니다. 이때 중요한 개념 중 하나는 접근자와 설정자 입니다.

1. 접근자 (Getter)

접근자는 클래스 내부의 데이터를 외부에서 가져오는 용도로 사용됩니다. 즉, 객체의 속성에 접근할 수 있는 메소드입니다.

다음은 간단한 Circle 클래스의 예시입니다. Circle 클래스에는 반지름(radius) 속성이 있으며, 이를 외부로 반환하는 get_radius() 메소드가 정의되어 있습니다.

class Circle:
    def __init__(self, radius):
        self.radius = radius

    def get_radius(self):
        return self.radius

circle = Circle(5)
print(circle.get_radius())  # 출력: 5

위의 예제에서 get_radius() 메소드를 사용하여 circle 객체의 반지름(radius)에 접근하여 값을 반환할 수 있습니다.

2. 설정자 (Setter)

설정자는 클래스 내부의 데이터 값을 변경하는 용도로 사용됩니다. 즉, 객체의 속성 값을 변경할 수 있는 메소드입니다.

다음은 Circle 클래스에 설정자인 set_radius() 메소드를 추가한 예시입니다.

class Circle:
    def __init__(self, radius):
        self.radius = radius

    def get_radius(self):
        return self.radius

    def set_radius(self, new_radius):
        self.radius = new_radius

circle = Circle(5)
print(circle.get_radius())  # 출력: 5

circle.set_radius(10)
print(circle.get_radius())  # 출력: 10

위의 예제에서 set_radius() 메소드를 사용하여 circle 객체의 반지름(radius)을 변경할 수 있습니다. 따라서 circle.set_radius(10)을 호출한 후 circle.get_radius()를 호출하면 반지름이 10으로 변경된 값을 얻을 수 있습니다.

3. 접근자와 설정자를 사용하는 이유

객체지향 프로그래밍에서 접근자와 설정자를 사용하는 이유는 여러 가지가 있습니다.

첫째, 데이터의 무결성을 보장할 수 있습니다. 접근자와 설정자를 통해 데이터에 제약 조건을 걸거나, 중간 처리를 추가할 수 있습니다. 예를 들어, 반지름이 음수일 수 없는 경우 set_radius()에서 음수 값을 거부할 수 있습니다.

둘째, 객체의 인터페이스를 제어할 수 있습니다. 클래스 내부 데이터를 외부에서 직접 접근하는 것이 아니라 접근자와 설정자 메소드를 통해 데이터에 접근하면, 객체의 인터페이스를 더 강력하게 제어할 수 있습니다. 이는 추후에 클래스의 내부 구현을 변경해도 외부에서의 접근 방식에 큰 영향을 주지 않습니다.

셋째, 데이터의 은닉화를 지원합니다. 접근자와 설정자를 사용하면 클래스의 내부 데이터를 은닉화할 수 있습니다. 외부에서 직접적으로 데이터를 수정할 수 없으므로, 데이터의 일관성과 안정성을 유지할 수 있습니다.

결론

접근자와 설정자는 객체지향 프로그래밍에서 중요한 개념이며, 데이터를 보호하고 제어하는 데 유용합니다. Python에서는 접근자와 설정자를 구현하기 위해 일반적으로 get_set_ prefix를 사용하는 관례가 있으며, 이를 통해 손쉽게 접근자와 설정자를 구현할 수 있습니다.