본문 바로가기
Dart/Dart Programming language

[초급] Dart 객체 지향 프로그래밍 기초: 접근 제어자: public, private, protected

by Maccrey Coding 2024. 9. 5.
반응형

 

1. Public (공개)

Public 접근 제어자란?

public 접근 제어자는 클래스의 멤버가 어디서나 접근 가능하도록 설정하는 것입니다. Dart에서 기본적으로 모든 클래스의 멤버는 public입니다. 특별히 public을 명시할 필요는 없습니다.

class Person {
  String name;
  int age;

  void greet() {
    print('Hello, my name is $name and I am $age years old.');
  }
}

void main() {
  Person person = Person();
  person.name = 'Alice';
  person.age = 30;
  person.greet(); // 출력: Hello, my name is Alice and I am 30 years old.
}

위 코드에서 name, age, greet 메서드는 모두 public입니다. 즉, Person 클래스 외부에서 자유롭게 접근할 수 있습니다.

2. Private (비공개)

Private 접근 제어자란?

Dart에서는 클래스의 멤버를 비공개로 설정하여 외부에서 접근하지 못하도록 할 수 있습니다. 이를 위해 변수나 메서드 이름 앞에 밑줄(_)을 붙입니다. 이로 인해 해당 멤버는 같은 라이브러리(파일) 내에서만 접근할 수 있습니다.

class Person {
  String _name; // private 변수
  int _age; // private 변수

  Person(this._name, this._age);

  void _updateAge(int newAge) { // private 메서드
    _age = newAge;
  }

  void greet() {
    print('Hello, my name is $_name and I am $_age years old.');
  }
}

void main() {
  Person person = Person('Alice', 30);
  // person._name = 'Bob'; // 오류: _name은 private입니다.
  // person._updateAge(35); // 오류: _updateAge는 private입니다.
  person.greet(); // 출력: Hello, my name is Alice and I am 30 years old.
}

위 코드에서 _name과 _age, 그리고 _updateAge 메서드는 private입니다. 외부에서 이들에 직접 접근하려고 하면 오류가 발생합니다.

3. Protected (보호된 접근 제어자)

Protected 접근 제어자란?

Dart에서는 전통적인 의미의 protected 접근 제어자를 지원하지 않습니다.

대신, protected에 해당하는 개념을 구현하기 위해 상속을 통해 부모 클래스의 public 및 protected 멤버를 자식 클래스에서 사용할 수 있습니다.

Dart에서 상속받은 클래스는 부모 클래스의 public 멤버에 접근할 수 있으며, 부모 클래스의 private 멤버에는 접근할 수 없습니다.

class Animal {
  String name;

  Animal(this.name);

  void makeSound() {
    print('Animal makes a sound.');
  }

  // Dart에서는 protected 접근 제어자가 없으므로, public 멤버로 설정해야 합니다.
  void _privateMethod() {
    print('This is a private method.');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);

  void bark() {
    print('The dog barks.');
  }

  void showPrivateMethod() {
    // 부모 클래스의 private 메서드에는 접근할 수 없습니다.
    // _privateMethod(); // 오류: _privateMethod는 private입니다.
    print('Can't access private method of Animal class.');
  }
}

void main() {
  Dog dog = Dog('Buddy');
  dog.makeSound(); // 출력: Animal makes a sound.
  dog.bark(); // 출력: The dog barks.
  dog.showPrivateMethod(); // 출력: Can't access private method of Animal class.
}

위 코드에서 Dog 클래스는 Animal 클래스의 public 멤버에는 접근할 수 있지만, private 멤버에는 접근할 수 없습니다.

4. 요약

  • Public: Dart에서 기본적으로 모든 클래스 멤버는 공개적이며, 외부에서 접근할 수 있습니다.
  • Private: 변수나 메서드 이름 앞에 밑줄(_)을 붙여서 설정하며, 같은 라이브러리 내에서만 접근할 수 있습니다.
  • Protected: Dart에서는 전통적인 protected 접근 제어자를 제공하지 않으며, 상속을 통해 public 멤버를 자식 클래스에서 사용할 수 있습니다. private 멤버는 상속받은 클래스에서 접근할 수 없습니다.

이 포스트가 Dart에서 접근 제어자의 개념을 이해하는 데 도움이 되기를 바랍니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형