getter, setter
python이 아닌 다른 언어를 사용하면 getter, setter에 익숙 할 것이다.
public 인스턴스 변수에 대해서는 쉽게 접근이 가능해서 따로 getter, setter를 두지 않는다. 하지만 protected, private 등의 변수를 사용하여 해당 변수에 대해서 접근하지 못하게 한 경우는 데코레이터로 getter, setter를 만들어 줄 수 있다.
getter
@property 데코레이터를 사용하여 변수이름을 함수명으로 하여 지정해 줄 수 있다.
setter
@변수명.setter 데코레이터를 사용하여 변수이름을 함수명으로 하고 파라미터로 할당할 값을 지정해주면 된다.
코드
class Student:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, val):
self._name = val
student = Student('철수')
print(student.name)
# 철수
student.name = '영희'
print(student.name)
# 영희
처음에 철수라는 이름으로 student 인스턴스를 생성해주고 instance.name으로 name변수에 접근할 수 있다. 또한 instance.name = val을 통해 name 변수에 값을 할당해 줄 수 있다.
응용
setter를 만들어 활용하는 경우로는 인스턴스 변수에 원하지 않는 값을 할당하려고 할 때 에러메시지를 주거나 기본값으로 설정할 수 있게 된다.
class Student:
def __init__(self, age):
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, val):
if val < 0:
raise ValueError(f'나이는 0보다 커야 합니다. {val}')
self._age = val
student = Student(30)
student.age = -3
# ValueError: 키는 0보다 커야 합니다. -3
위의 코드 같은 경우 나이는 0보다 작을 수 없기 때문에, 그런 값이 들어온 경우 에러처리를 해준다.
Uploaded by N2T