dart-class-02

김동욱·2023년 12월 1일
0

레퍼런스 타입과 참조

컴퓨터의 메모리 영역
인스턴스 = heap 영역 안에 확보된 메모리
dart 는 모든 타입이 레퍼런스 타입임

컴파일시 크기가 결정

  • CODE : 함수, 제어문, 상수
  • DATA : 초기화된 전역변수
  • BSS(Blocked Stated Symbol) : 초기화 되지 않은 전역변수

실행 중 메모리 할당

  • HEAP : 동적할당 malloc()
  • STACK : 지역변수

/////////////////////////////////////////////////////////////////

클래스 선언 후 클래스를 인스턴스화
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 타입을 인자로 전달하여 사용

/////////////////////////////////////////////////////////////////

profile
백엔드 개발자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN