2025-01-20T02:26:20
This commit is contained in:
40
doc/10_03_property.md
Normal file
40
doc/10_03_property.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 프로퍼티
|
||||
getter와 setter는 객체 지향 프로그래밍에서 객체의 데이터를 안전하게 관리하고, 코드의 유연성을 높이는 데 중요한 역할을 합니다. 특히, 대규모 프로젝트에서 여러 개발자가 함께 작업할 때 데이터 일관성을 유지하고 예기치 않은 오류를 방지하는 데 큰 도움이 됩니다.
|
||||
|
||||
파이썬의 `@property` 데코레이터는 객체의 속성을 마치 메서드처럼 접근하고 설정할 수 있도록 해주는 강력한 기능입니다. 이를 통해 우리는 객체의 내부 상태를 좀 더 안전하게 관리하고, 코드의 가독성을 높일 수 있습니다.
|
||||
|
||||
`@property` 데코레이터를 사용하여 getter와 setter를 정의합니다.
|
||||
|
||||
* getter 메서드 자동 생성: `@property` 데코레이터가 붙은 메서드는 자동으로 getter 메서드가 됩니다. 즉, 객체의 속성 값을 가져올 때 마치 변수에 접근하듯이 사용할 수 있습니다.
|
||||
* setter 메서드 생성: `@변수명.setter` 데코레이터를 사용하여 setter 메서드를 정의할 수 있습니다. setter 메서드는 속성 값을 설정할 때 호출됩니다.
|
||||
* 속성 값에 대한 유효성 검사: setter 메서드에서 값의 유효성을 검사하여 부적절한 값이 설정되는 것을 방지할 수 있습니다.
|
||||
|
||||
```python
|
||||
class Person:
|
||||
def __init__(self, name, age):
|
||||
self._name = name
|
||||
self._age = age
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
@name.setter
|
||||
def name(self, value):
|
||||
if not isinstance(value, str):
|
||||
raise TypeError("Name must be a string")
|
||||
self._name = value
|
||||
|
||||
@property
|
||||
def age(self):
|
||||
return self._age
|
||||
|
||||
@age.setter
|
||||
def age(self, value):
|
||||
if not isinstance(value, int):
|
||||
raise TypeError("Age must be an integer")
|
||||
if value < 0:
|
||||
raise ValueError("Age cannot be negative")
|
||||
self._age = value
|
||||
```
|
||||
위 예시에서 _name과 _age는 private 변수로, 외부에서 직접 접근할 수 없습니다. 대신 name과 age라는 property를 사용하여 값을 읽고 설정합니다. `@property` 데코레이터는 getter 메서드를, `@변수명.setter` 데코레이터는 setter 메서드를 정의하는 데 사용됩니다.
|
||||
Reference in New Issue
Block a user