Dart, 캡슐화

David·2024년 3월 11일
0

Dart

목록 보기
4/4
post-thumbnail

캡슐화란

Dart에서 캡슐화란 객체의 세부 구현 내용을 숨기고, 사용자에게 피요한 기능만을 제공하는 객체지향 프로그래밍의 중요한 원칙 중 하나입니다. 캠슐화를 통해 데이터와 메서드를 하나의 단위로 묶고, 데이터의 집적접인 접근을 제한(control)함으로써 데이터의 무결성을 보호하고, 객체의 사용 방법을 단순화할 수 있습니다. Dart에서는 주로 접근 제어자와 gettersetter를 사용하여 캡슐화를 구현합니다.

접근 제어자

Dart에서는 public, protected, privated같은 전통적인 접근 제어자를 사용지않고, 대신 이름이 언더스코어('_')로 시작하는 멤버를 private로 취급하여, 해당 멤버가 정의된 라이브러리 내부에서만 접근할 수 있게 합니다.

  • Private 멤버: 이름이 underscore('_')로 시작하는 필드나 메서드는 private으로 간주합니다. 이러한 멤버는 해당 클래스가 정의된 파일(라이브러리) 내에서만 접근이 가능합니다.
  • Public 멤버: 밑줄 없이 정의된 필드나 메서드는 public으로 간주되어, 어디에서나 접근이 가능합니다.

Getter 와 Setter

  • Getter: 필드의 값을 반환하는 메서드입니다. Read-Only(읽기 전용) 프로퍼티를 구현할 때 사용합니다.
  • Setter: 필드에 값을 할당하는 메서드입니다. Write-Only(쓰기 전용)프로퍼티를 구현할 때 사용합니다. (자주 사용되진 않음)

캡슐화 예제코드

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 필드를 가지고 있습니다. 이 필드들은 클래스 외부에서 직접 접근을 할 수 없으며, 대신 nameage에 대한 게터와 age에 대한 세터를 제공하여 필드에 안전하게 접근할 수 있게 합니다. 이렇게 캡슐화를 구현함으로써, Person 객체의 사용자는 객체의 내부 구현에 대해 알 필요 없이, 필요한 기능을 사용할 수 있습니다.

profile
Flutter에 관심있습니다.

0개의 댓글