AI에 따르면 캡슐화, encapsulation이란?
AI : 객체 지향 프로그램으로 인해 현실세계를 자유롭게 개발 할 수 있게 되었지만 사람이기 때문에 잘못된 조작 등 휴먼 에러를 완전히 없앨 수는 없다. 따라서 실수를 사전에 방지하도록 하는 것이 바로 ‘캡슐화’다.
private 를 사용하여 다른 클래스에서의 접근을 제한한다.
제한범위 | 명칭 | 설정방법 | 접근가능한 범위 |
---|---|---|---|
엄격 | private | 멤버 앞에 _ 붙이기 | 자기 자신의 클래스 |
--- | --- | --- | --- |
느슨 | public | 기본값 | 모든 클래스 |
class Cleric{
String name;
int hp;
int _mp;
Cleric({required this.name,
required this.hp,
required int mp,
}):_mp=mp;
}
class Cleric {
String name;
int hp;
int mp;
Cleric(this.name, this.hp, this.mp);
void _heal() {
print('힐했다.');
}
}
다른 클래스에서의 접근은 getter 와 setter 을 사용해야 한다.
AI : getter와 setter의 사용으로 클래스의 내부 구조를 외부에서 알 필요 없이 속성에 접근하거나 수정하는 것이 가능해집니다. 이렇게 하면 코드의 유지보수가 용이해지고, 클래스의 사용자는 더 간단하고 직관적인 인터페이스를 사용할 수 있게 됩니다.
getter : 읽기 전용 프로퍼티를 구현할때 사용한다. (데이터를 가져올때 )
setter : 쓰기 전용 프로퍼티를 구현할 때 사용한다. (데이터를 설정할때) : 잘 안씀
setter은 반드시 ()안에 한개의 parameter가 들어가야 한다.
클래스가 다른파일에 있어서 접근 불가능 한 경우 사용하면 된다.
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);
}
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 을 줄 수 있다.