[Dart] 메모리 구조: static과 heap, stack 간의 관계

HootJem's avatar
Sep 26, 2024
[Dart] 메모리 구조: static과 heap, stack 간의 관계
Dard 언어 연습할 때
notion image
여기서 할 수도 있고
vsCode 에서도 할 수 있다.
notion image
notion image
설치
 
얘네 클래스 없고, 클래스 바깥에 있어서 이미 static 임. (정적 메모리) 그래서 굳이 적어놓지 않음
 
클라스 내부에 있는 static 은 정적 메모리에 할당되어도, 클래스.name 이라고 호출해야하고(클래스 내부의 static 에 뜨는거) 클래스 바깥에 있는 거는 그냥 name 으로 부를 수 있다.(전역 스테틱, 할당되는 메모리장소가 다르다)
notion image
화살표 있는 애들은 이미 떠있다. (1급 객체)
Animal new 하면 id 가 튀어나오겟죠 (그럼 heap 에 뜹니다)
animal.id 이런식으로 부를 수 잇을것임.
notion image
동물은 static 변수이기 때문에 1개만 존재한다. id 는 animal 이 new 될 때 마다 각 객체에 할당된다.
 
final static을 붙이면 한 번 값이 할당된 후에는 값이 변경되지 않기때문에 불변적인건 Final static 을 붙이면 좋다.(공통으로 관리될 값)
 
static 은 값을 바꿀 수 있다. 그러나 모든 객체가 같은 값을 공유하기 때문에 new 할 때 마다 값이 바뀔거라면 굳이 static 할 필요가 없다.
notion image
ex) animal 100번 호출하는데 100마리 다 강아지일때
notion image
ex) animal 100번 호출하는데 100마리의 강아지 종이나 이름으로 바꾸고싶다면
 
메서드가 실행될 때 실행되는거 → stack
//얘는 static 에 뜸 void hello() { //메서드가 아니라 함수다.(기능을 가지는 친구) int num = 10; // hello 가 실행되어야 얘가 실행됨. 즉, stack 임. (클래스가 없어서 heap 이 없음) }
 
클래스로 관리하여 동적으로 heap 에 띄우는게 사용하기 유리하다.
// static > heap > stack class Animal { int id = 1; static String name = "강아지"; void speak() { String grr = "그르르"; //메서드 (상태 변경할 때) } } String name = "Hello World"; //얘는 static 에 뜸 void hello() { //메서드가 아니라 함수다.(기능을 가지는 친구) int num = 10; // hello 가 실행되어야 얘가 실행됨. 즉, stack 임. (클래스가 없어서 heap 이 없음) } // 메인 함수라고 부른다(클래스 밖에 있다면 함수) void main() { // 이때 name 이랑 , Animal.name 만 static 에 떠있다. print(name); print(Animal.name); // Animal 안의 a를 꺼내려면 Animal a = Animal(); print(a.id); }
 
Share article

[HootJem] 개발 기록 블로그