encapsulation, getter &setter

Kim Da HEE·2023년 12월 4일
0

Dart 언어

목록 보기
6/11

AI에 따르면 캡슐화, encapsulation이란?

  • 캡슐화

    AI : 객체 지향 프로그램으로 인해 현실세계를 자유롭게 개발 할 수 있게 되었지만 사람이기 때문에 잘못된 조작 등 휴먼 에러를 완전히 없앨 수는 없다. 따라서 실수를 사전에 방지하도록 하는 것이 바로 ‘캡슐화’다.

private 를 사용하여 다른 클래스에서의 접근을 제한한다.

  • 접근지정자
제한범위명칭설정방법접근가능한 범위
엄격private멤버 앞에 _ 붙이기자기 자신의 클래스
------------
느슨public기본값모든 클래스
  • 변수 mp를 private 으로 지정
class Cleric{
  String name;
  int hp;
  int _mp;
  
  Cleric({required this.name,
          required this.hp,
          required int mp,
         }):_mp=mp;
}
  • 메서드를 private으로 지정
class Cleric {
  String name;
  int hp;
  int mp;

  Cleric(this.name, this.hp, this.mp);

  void _heal() {
    print('힐했다.');
  }
}

다른 클래스에서의 접근은 getter 와 setter 을 사용해야 한다.

  • getter setter

AI : getter와 setter의 사용으로 클래스의 내부 구조를 외부에서 알 필요 없이 속성에 접근하거나 수정하는 것이 가능해집니다. 이렇게 하면 코드의 유지보수가 용이해지고, 클래스의 사용자는 더 간단하고 직관적인 인터페이스를 사용할 수 있게 됩니다.

getter : 읽기 전용 프로퍼티를 구현할때 사용한다. (데이터를 가져올때 )
setter : 쓰기 전용 프로퍼티를 구현할 때 사용한다. (데이터를 설정할때) : 잘 안씀

setter은 반드시 ()안에 한개의 parameter가 들어가야 한다.

  • getter 와 setter 예시

클래스가 다른파일에 있어서 접근 불가능 한 경우 사용하면 된다.

class Cleric {
  String name;
  int _hp;
  int mp;

  Cleric({required this.name, required int hp, required this.mp}) : _hp = hp;

  void _heal() {
    print('힐했다.');
  }

  int get hp => _hp; //getter

  set hp(int hp) { //setter
    _hp = hp;
  }
}

void main() {
  Cleric cleric = Cleric(name: 'Lux', hp: 50, mp: 100);
  print(cleric.hp); // getter 사용

  cleric.hp = 60;  //setter 사용
  print(cleric.hp); 
}
  • setter 을 이용한 타당성 검사 참고 사이트

https://dart-tutorial.com/object-oriented-programming/getter-and-setter-in-dart/

class Wand {
  String _name;
  double _power;

  Wand({
    required String name,
    required double power,
  })  : _name = name,
        _power = power;

  String get name => _name; //읽기 허용

  set name(String value) {
    _name = value;
    if (value.length < 3) {
      throw Exception('이름은 3보다 커야합니다.');
    }
  }

조건에 맞지 않은 exception 을 줄 수 있다.

0개의 댓글