기본적으로 객체에는 null이 들어있으며, 변수에 할당할 때에 타입이 지정됩니다.

Object:

박싱과 언박싱을 통해 값을 저장하는데, 값을 박싱해 heap에 저장하고 stack에 그 주소를 저장해

참조하는 형식으로 사용한다.

const and final

const: (컴파일)

인스턴트를 생성할때 무조건 새로운 인스턴트를 생성한다 but const로 선언된 변수나 위젯인경우 생성을 앱이 시작이될때 메모리와 같이 등록을 하여 해당시점에서 새로운 인스턴트가 아닌 메모리에 올라가있는 인스턴트를 매번 사용한다.

setState 등 상태 변경에서 새로운 인스턴스를 생성하고 기존의 인스턴스는 메모리에 남게 되어 일정 시점에서 GC에 의해 지워지는데 빈번한 생성은 메모리 효율을 저하시킬 수 있다. 하지만 const를 통한 재사용 시 이러한 사용하지 않는 인스턴스가 메모리에 남게되는 메모리 낭비를 효율적으로 관리할 수 있다.

컴파일할 때에 결정되므로 상수와 같이 사용됩니다.

final: (런타임)

const와 마찬가지로 처음 선언한 값을 변경할 수 없다.

final은 생성시 값을 부여하지 않아도 이후 최초 1번 값을 지정해줄수가있다.

선언부의 코드만으로는 컴파일러가 해당 변수의 값을 알 수 없기 때문에 const처럼 앱 실행 시 메모리에 넣어 관리할 수 없다.

var:

타입을 알아서 유추하여 지정하게 됩니다.

var는 다양한 타입의 값을 자유롭게 넣는 것이 아닙니다.

var는 입력이 주어지게 되면 해당 타입으로 타입종류가 정해지게되어 이후에 다른 타입의 값을 넣으려 한다면 에러가 납니다.