Dart 언어에서 클래스의 private 속성에 안전하게 접근하고, 해당 속성을 조작할 수 있는 방법을 제공합니다. 이를 위해 getter와 setter 메소드를 사용할 수 있습니다. 이들은 특별한 종류의 메소드로, 객체의 속성을 읽거나 변경할 때 사용됩니다. getter는 속성 값을 읽을 때, setter는 속성 값을 설정할 때 사용됩니다.
getter는 특정 속성의 값을 반환하는 메소드입니다. Dart에서는 다음과 같이 정의할 수 있습니다.
class Circle {
double _radius; // Private 속성
Circle(this._radius);
// Getter for radius
double get radius => _radius;
}
위 예제에서 _radius는 private 속성이므로, 클래스 외부에서 직접 접근할 수 없습니다. 그러나 radius라는 getter를 통해 간접적으로 _radius 값에 접근할 수 있게 됩니다
setter는 특정 속성에 값을 할당할 때 사용하는 메소드입니다. setter를 사용하면, 값을 설정하기 전에 추가적인 검증 로직을 실행할 수 있습니다.
// Setter for radius
set radius(double value) {
if (value <= 0) {
throw Exception('Radius cannot be negative or zero.');
}
_radius = value;
}
}
이 예제에서 radius 속성에 대한 setter를 정의했습니다. 이 setter는 새로운 반지름 값이 음수이거나 0이 아닌지 확인합니다. 이러한 검증을 통해, Circle 객체가 유효한 상태를 유지하도록 도와줍니다.
class Circle {
double _radius;
Circle(this._radius);
// Getter for radius
double get radius => _radius;
// Setter for radius
set radius(double value) {
if (value <= 0) {
throw Exception('반지름은 음수나 0이 될 수 없습니다..');
}
_radius = value;
}
}
다른 언어에서는 getter와 setter를 호출할 때, 명시적으로 메소드 이름을 호출해야 합니다. 예를 들어, Java에서는 getRadius()나 setRadius(value)와 같은 방식으로 getter와 setter를 호출합니다. 반면, Dart에서는 이러한 getter와 setter를 속성처럼 직접 접근하는 것처럼 사용할 수 있습니다.
아래 코드를 보면 알 수 있듯이 Dart에서는 이 getter와 setter를 마치 일반 속성에 접근하듯이 사용할 수 있습니다.
void main() {
var circle = Circle(5.0);
print('초기 반지름: ${circle.radius}'); // Getter를 사용하여 반지름 값 출력
circle.radius = 10.0; // Setter를 사용하여 반지름 값을 10.0으로 변경
print('업데이트된 반지름: ${circle.radius}');
try {
circle.radius = -5.0; // Setter에서 예외 발생 예정
} catch (e) {
print(e); // 예외 처리 및 출력
}
}
실행결과