캡슐화

허준호·2025년 6월 27일
0

dart 언어 공부

목록 보기
3/16
post-thumbnail

캡슐화

: 변수나 메소드들을 감싸서 안보이게 하는 정보 은닉 개념 중 하나이다

장점

  • 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과도 누릴 수 있다.

접근 지정자

제한 범위명칭설정 방법접근 가능한 범위
제한이 엄격private멤버 앞에 _붙이기자기 자신의 클래스
제한이 느슨public기본 값모든 클래스

private 필드 사용 시 생성자 정의

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: '홍길동')으로 생성
	*/
}

getter & setter

getter

: 읽기 전용 프로퍼티를 구현할 때 사용

class Hero {
	String name;
	int _hp;
	
	int get hp => _hp;
}

void main() {
	Hero hero = Hero();
	
	hero._hp // private 필드에 직접적으로 접근 불가능
	hero.hp // 출력 시 _hp 필드의 값을 반환
}

setter

: 쓰기 전용 프로퍼티를 구현할 때 사용(잘 안씀)

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

: 순서대로 쌓여있는 구조(아이템의 중복을 허용)

List 탐색 방법

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)

Set

: 순서가 없는 집합(중복 불가)

  • index를 이용한 탐색 불가능
  • getter는 제공하지 않기 때문에 반복이 필요하면 Iterator()를 사용하거나 forEach()를 사용
  • 빠른 검색 제공

Iterator

  • LIst나 Set은 요소를 탐색할 수 있는 iterator를 제공한다
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

: 키와 값의 쌍으로 저장(키 중복 불가능). 순서를 보장하지 않는다

Map에 저장된 값 꺼내기

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);
}

Array vs. List

Array

  • 동적 배열
  • 크기를 미리 지정해줘야 한다
  • 새로운 값 삽입 시 기존에 있는 값을 제거해야 한다

List

  • 연결 리스트
  • 한 노드의 값과 다음 노드의 주소가 저장되어 있다
  • 삽입, 수정, 삭제가 쉽다
  • Array보다 메모리를 더 차지한다

추가 정보

Dart에서 하지 말아야 할 요소

  • 타입 생략
  • dynamic 타입 사용
  • null 보장 → !
  • late 키워드

출처

https://inpa.tistory.com/entry/OOP-캡슐화Encapsulation-정보-은닉의-완벽-이해

profile
후추랑 소금 좋아하는 개발자

0개의 댓글