Dart에서 캡슐화란 객체의 세부 구현 내용을 숨기고, 사용자에게 피요한 기능만을 제공하는 객체지향 프로그래밍의 중요한 원칙 중 하나입니다. 캠슐화를 통해 데이터와 메서드를 하나의 단위로 묶고, 데이터의 집적접인 접근을 제한(control)함으로써 데이터의
무결성
을 보호하고, 객체의 사용 방법을 단순화할 수 있습니다. Dart에서는 주로 접근 제어자와getter
와setter
를 사용하여 캡슐화를 구현합니다.
Dart에서는
public
,protected
,privated
같은 전통적인 접근 제어자를 사용지않고, 대신 이름이 언더스코어('_')로 시작하는 멤버를private
로 취급하여, 해당 멤버가 정의된 라이브러리 내부에서만 접근할 수 있게 합니다.
- Private 멤버: 이름이 underscore('_')로 시작하는 필드나 메서드는 private으로 간주합니다. 이러한 멤버는 해당 클래스가 정의된 파일(라이브러리) 내에서만 접근이 가능합니다.
- Public 멤버: 밑줄 없이 정의된 필드나 메서드는 public으로 간주되어, 어디에서나 접근이 가능합니다.
class Person {
// Private 필드
String _name;
int _age;
// Person 생성자
Person(this._name, this._age);
// name 필드에 대한 게터
String get name => _name;
// age 필드에 대한 게터와 세터
int get age => _age;
set age(int value) {
if (value >= 0) {
_age = value;
}
}
}
void main() {
var person = Person('John Doe', 30);
// 게터를 사용하여 name과 age 출력
print(person.name); // John Doe
print(person.age); // 30
// 세터를 사용하여 age 수정
person.age = 32;
print(person.age); // 32
}
위 예제에서
Person
클래스는_name
과_age
라는 두개의 private 필드를 가지고 있습니다. 이 필드들은 클래스 외부에서 직접 접근을 할 수 없으며, 대신name
과age
에 대한 게터와age
에 대한 세터를 제공하여 필드에 안전하게 접근할 수 있게 합니다. 이렇게 캡슐화를 구현함으로써,Person
객체의 사용자는 객체의 내부 구현에 대해 알 필요 없이, 필요한 기능을 사용할 수 있습니다.