: 변수나 메소드들을 감싸서 안보이게 하는 정보 은닉 개념 중 하나이다
제한 범위 | 명칭 | 설정 방법 | 접근 가능한 범위 |
---|---|---|---|
제한이 엄격 | private | 멤버 앞에 _붙이기 | 자기 자신의 클래스 |
제한이 느슨 | public | 기본 값 | 모든 클래스 |
class Hero {
String name;
int _hp;
Hero({required this.name, required int hp}) : _hp = hp;
/*
required this._hp 불가능 -> named parameter는 밑줄로 시작할 수 없다
Hero(this._hp, {required this.name}) 가능
인스턴스 생성시 Hero(100, name: '홍길동')으로 생성
*/
}
: 읽기 전용 프로퍼티를 구현할 때 사용
class Hero {
String name;
int _hp;
int get hp => _hp;
}
void main() {
Hero hero = Hero();
hero._hp // private 필드에 직접적으로 접근 불가능
hero.hp // 출력 시 _hp 필드의 값을 반환
}
: 쓰기 전용 프로퍼티를 구현할 때 사용(잘 안씀)
class Hero {
String name;
int _hp;
set hp(int value) => _hp = value;
}
void main() {
Hero hero = Hero();
hero._hp = 100; // private 필드에 직접적으로 할당 불가능
hero.hp = 100; // _hp 필드의 값이 100으로 설정
}
: 순서대로 쌓여있는 구조(아이템의 중복을 허용)
List<String> animals= ['강아지', '고양이', '호랑이'];
1.
for (int i = 0; i < animals.length; i++) {
print(animals[i]);
}
2.
for (final animal in animals) {
print(animal);
}
3.
animals.forEach((String animal){
print(animal)
}
4.
animals.forEach(print)
: 순서가 없는 집합(중복 불가)
List<int> scores = [10, 50, 100, 100, 50];
final iterator = scores.iterator();
while (iterator.moveNext()) {
print(iterator.current);
}
Set<int> scores = {10, 50, 100, 200};
final iterator = scores.iterator;
while (iterator.moveNext()) {
print(iterator.current);
}
}
: 키와 값의 쌍으로 저장(키 중복 불가능). 순서를 보장하지 않는다
Map<String, dynamic> gildong = {
'name' : '홍길동',
'id' : 0,
'age' : 20,
}
for (var e in gildong.entries) { // name, id, age 차례로 출력
print(e.key);
}
for (var e in gildong.entries) { // 홍길동, 0, 20 차례로 출력
print(e.value);
}
https://inpa.tistory.com/entry/OOP-캡슐화Encapsulation-정보-은닉의-완벽-이해