Dard 언어 연습할 때

여기서 할 수도 있고
vsCode 에서도 할 수 있다.


설치
얘네 클래스 없고, 클래스 바깥에 있어서 이미 static 임. (정적 메모리) 그래서 굳이 적어놓지 않음
클라스 내부에 있는 static 은 정적 메모리에 할당되어도, 클래스.name 이라고 호출해야하고(클래스 내부의 static 에 뜨는거)
클래스 바깥에 있는 거는 그냥 name 으로 부를 수 있다.(전역 스테틱, 할당되는 메모리장소가 다르다)

화살표 있는 애들은 이미 떠있다. (1급 객체)
Animal
new 하면 id 가 튀어나오겟죠 (그럼 heap 에 뜹니다)animal.id 이런식으로 부를 수 잇을것임.

동물은 static 변수이기 때문에 1개만 존재한다.
id 는 animal 이 new 될 때 마다 각 객체에 할당된다.
final static
을 붙이면 한 번 값이 할당된 후에는 값이 변경되지 않기때문에
불변적인건 Final static 을 붙이면 좋다.(공통으로 관리될 값)static 은 값을 바꿀 수 있다. 그러나 모든 객체가 같은 값을 공유하기 때문에
new 할 때 마다 값이 바뀔거라면 굳이 static 할 필요가 없다.

ex) animal 100번 호출하는데 100마리 다 강아지일때

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