0404
변수의 6가지 속성
인스턴스 : 메모리에 올라온것
stack
heap
data
알리아싱
타입 = 값의 범위+할 수 있는 연산
l-value = r-value
주소 값
타입이 결정된다 = 바인딩된다
이름, 주소, 타입, lifetime이 묶인다!
type에 대한 바인딩 → static / dynamic
바인딩 타임 → 프로그램 실행 전(컴파일), 실행 후(런타임)
complie time → 대부분 타입에 결정. 타입에 대한 바인딩, static하게 바인딩될때. C, JAVA
load time → 대부분 주소가 결정. 프로그램 실행할때=인스턴스가 생길 때=메모리에 올라올때.
run time → 타입&주소이 동적으로 결정. heap이나 static에 들어가는 변수. dynamic
바인딩
C#은 세모
타입 선언
생성 : 프로그램 시작 → 종료 : 사라짐
주소 안바뀜. 값도 안바뀜. 접근이 빠르다.
단점. flexible 떨어짐. 리셋을 못함. recursion x
함수 내 선언, 파라미터로 넘겨주는 애들
리커전 허용
allocation deallocation (장단점)
시간이 더 걸림 ↔ 공간을 아낄 수있음(큰 배열에서 의미있음)
히스토리 볼 수 있음.
상대주소
이게 보통
동적으로. 원할때 allocate & deallocate
진짜. 특정 시점에서만 메모리를 과돠하게 쓰고자 할때
단점 : 상대적으로 가기 때문에 속도가 느림. 비효율적. allocate & deallocate 할때 오버헤드 걸림. 속도 측면에서는 최
동적언어에서
리스트에 값을 넣는 순간 메모리에 할당이 된다! (new를 쓰진 않았음)
속도 느림
에러 검출 확률이 낮음(다이나밍이라서)
어디서부터 어디까지 그 변수를 쓸 수 있느냐 [범위]
scope → 우리가 아는건 거의 다 static
local
non-local
global (local variable 끝까지 가면)
블록구조→ 중첩도 가능
블록 밖이랑 안에 같은 이름의 변수가 있으면 밖에 것이 하이딩된다
stack으로 사용하는 변수들을 관리
다른 언어들은 변수의 선언 시점 부터 쓸 수 있는데, C#은 해당 변수가 위치한 블록의 제일 처음부터 사용할 수있다
let 구조
global scope
파이썬의 전역변수
static scope을 짤떄 문제
dynamic scope
0406
스콥과 라이프타임은 로컬변수로 하면 같다
변수인데 값이 안바뀜
코드 유지보수 쉬움, 가독성 굿