private 변수

하상현·2024년 5월 3일
1

private 변수는 해당 변수가 선언된 클래스 외부에서는 직접적으로 접근할 수 없는 변수를 말합니다.
Dart에서는 private 변수를 선언할 때 변수 이름 앞에 밑줄(_)을 붙여 표시합니다.

왜 사용하는가?

Dart에서 private 변수를 사용하는 이유는 코드의 캡슐화(encapsulation)와 정보 은닉(information hiding)을 지원하기 위해서입니다.

캡슐화

- 클래스나 모듈 내부의 구현 세부사항을 숨기고 외부에 공개할 인터페이스만 노출함으로써 코드의 복잡성을 감소시킵니다.
- Private 변수를 사용하면 외부에서 직접적으로 접근하여 수정할 수 없으므로 클래스나 모듈의 내부 상태를 보호할 수 있습니다.
private 변수를 사용하는 클래스의 예시)

// private 변수 선언, getter와 setter 생성
class Example {
  int _privateVariable; // 필드(데이터)

  Example(this._privateVariable); //생성자

  int get privateVariable => _privateVariable; 

  void set privateVariable(int value) {
    _privateVariable = value;
  }
}


// private 변수에 접근하는 방법
void main() {
  Example example = Example(42);

  // getter를 사용하여 private 변수에 접근
  print(example.privateVariable); // 출력: 42

  // setter를 사용하여 private 변수에 값을 할당
  example.privateVariable = 100;

  // getter를 사용하여 변경된 private 변수의 값을 확인
  print(example.privateVariable); // 출력: 100
}

정보은닉

- 데이터를 외부로부터 숨기는 것
- 데이터에 직접적으로 접근하는 것을 제한하고, 오직 특정한 방법을 통해서만 데이터에 접근하도록 합니다.

class BankAccount {
  // private 변수로 선언하여 정보 은닉
  double _balance;

  // 생성자
  BankAccount(double initialBalance) {
    _balance = initialBalance;
  }

  // 입금 메서드
  void deposit(double amount) {
    _balance += amount;
  }

  // 출금 메서드
  void withdraw(double amount) {
    if (_balance >= amount) {
      _balance -= amount;
    } else {
      print('Insufficient balance');
    }
  }

  // 잔액 조회 메서드
  double getBalance() {
    return _balance;
  }
}

void main() {
  // 정보 은닉된 클래스 사용 예시
  BankAccount account = BankAccount(1000);

  // 입금
  account.deposit(500);

  // 출금
  account.withdraw(200);

  // 잔액 조회
  print('Current balance: ${account.getBalance()}');
}

정리

캡슐화는 데이터와 메서드를 묶어서 클래스를 구조화하는 것을 의미하고, 정보 은닉은 데이터의 직접적인 접근을 제한하여 데이터를 보호하는 것을 의미합니다. 정보 은닉은 캡슐화의 한 측면으로 클래스의 내부 구현을 숨겨 외부에서의 직접적인 접근을 제한합니다.

0개의 댓글