레퍼런스 타입과 참조
컴퓨터의 메모리 영역
인스턴스 = heap 영역 안에 확보된 메모리
dart 는 모든 타입이 레퍼런스 타입임
컴파일시 크기가 결정
실행 중 메모리 할당
/////////////////////////////////////////////////////////////////
클래스 선언 후 클래스를 인스턴스화
Hero 라는 클래스를 인스턴스화한 코드
final hero1 = Hero(name: 'user1', hp: 100);
/////////////////////////////////////////////////////////////////
클래스 Sword 형 필드를 가지는 클래스
/// Sword 클래스 선언
class Sword {
String name;
int damage;
Sword({
required this.name,
required this.damage,
});
}
Hero 클래스에서 Sword 형 필드를 가짐
class Hero {
String name;
int hp;
Sword? sword; /// sword 형 필드 선언 /// ? 는 반드시 필요한 필드는 아니라는 의미
Hero({
required this.name,
required this.hp,
this.sword,
});
}
/////////////////////////////////////////////////////////////////
따라서 Hero 클래스에 Sword 가 장착 된다면 아래와 같음
final fireSword = Sword(name: 'fireSword', damage: 5);
final hero = Hero(name: 'user1', hp: 100);
hero.sword = fireSword;
/////////////////////////////////////////////////////////////////
다른 타입을 인자 또는 리턴값으로 사용시
class Wizard {
String name;
int hp;
Wizard({
required this.name,
required this.hp,
});
void heal(Hero hero) {
hero.hp += 10;
print('${hero.name} 의 hp 를 10 회복');
}
}
위의 코드는 Hero 타입을 인자로 사용하는 코드
/////////////////////////////////////////////////////////////////
Hero 타입을 인자로 전달하는 코드
final hero = Hero(name: 'user1', hp: 100);
final wizard = Wizard(name: 'healer1', hp: 50);
wizard.heal(hero); // hero 타입을 인자로 전달하여 사용
/////////////////////////////////////////////////////////////////