클래스

허준호·2025년 6월 27일
0

dart 언어 공부

목록 보기
2/16
post-thumbnail

레퍼런스 타입과 참조

  • 가상세계 = 컴퓨터 메모리 영역
  • 인스턴스 = heap 영역 안에 확보된 메모리
    • heap: 동적 메모리 할당이 이루어지는 영역.
  • Dart는 모든 타입이 레퍼런스 타입!!

예시)

final hero1 = Hero(name: '홍길동', hp: 100)
final hero2 = hero1
hero2.hp = 200
print(hero1.hp) // 100(x) -> 200(o)

/*
- 인스턴스는 객체 생성 시 메모리에 저장된 값의 주소를 참조한다
- 따라서, hero1과 hero2는 같은 메모리의 주소를 참조하며
- hero2의 필드 값을 변경하면 hero1의 필드 값도 같이 변경된다
*/

생성자

: 클래스와 같은 이름을 가지는 함수로, 인스턴스 생성 시 사용된다

💡 타입 변수명 = 객체명(인수)

필수 Parameter

: 인스턴스 생성 시 매개변수에 값만 받아서 지정

💡 객체명(this.name, this.hp) → 객체명(‘홍길동’, 100)

Named Parameter

: 인스턴스 생성 시 매개변수에 이름을 부여하는 것. {} 사용

💡객체명({this.name, this.hp}) → 객체명(name: ‘홍길동’, hp: 100)

required

: 인스턴스 생성 시 필수로 값을 지정해줘야하는 필드.

  • 데이터 타입이 null을 허용하지 않으면 반드시 붙여야함!
💡 객체명({required this.필드명})

추가사항

  • 필수 매개변수와 named 매개변수를 동시에 사용할 경우 필수 매개변수가 앞에 와야한다
  • 모든 클래스는 반드시 1개 이상의 생성자를 가진다
  • 필수 매개변수와 named 매개변수를 이용하여 생성자를 오버로드 할 수 있다

static

: static 키워드는 변수나 메소에 사용되며, 클래스가 메모리에 로딩될 때 자동으로 생성된다

  • 인스턴스 생성 없이 필드 공유가 가능하다
class Hero {
	static int money = 100; // static 키워드를 사용하여 필드 공유
	String name;
	int hp;
	
	Hero({required this.name, required this.hp);
}

void main(){
	print(Hero.money); // 100이 출력된다
}
  • 정적 메소드 활용
class Hero {
	static int money = 100; // static 키워드를 사용하여 필드 공유
	String name;
	int hp;
	
	Hero({required this.name, required this.hp);
	
	static void setRandomMoney(){
		money = Random().nextInt(1000);
	}
}

void main(){
	Hero.setRandomMoney();
	print(Hero.money); // 0 ~ 999 중에서 랜덤값으로 출력
}

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

0개의 댓글