-
객체 생명주기
생명주기를 다루기 위해 사건을 구별해보자.
- 객체의 생성(메모리에 인스턴스가 할당되는것)
- 바인딩의 생성(변수 이름이 해당 객체와 연결되는것)
- 변수, 함수, 타입참조(바인딩을 사용하는 것)
- 바인딩의 비활성화(잠시 사용할 수 없음)
- 바인딩 파괴
- 객체파괴
이름과 그 이름이 나타내는 객체와의 바인딩이 생성되는 시점부터 파괴될 때까지의 기간을 바
인딩의 생명주기라고 한다. 비슷하게 객체의 생성과 파괴 사이의 기간을 객체 생
명주기라고 한다. 이 두 가지 생명주기는 꼭 일치할 필요는 없다. 객체는 주어진
이름으로 더 이상 그 객체를 참조할 수 없더라도 값을 보유하고 참조될 수 있는 상태로 남아있
을 수 있다.동일한 객체는 여러 개의 이름에 바인딩될 수 있고 각 바인딩은 다른 바인딩생명주
기를 가질 수 있다. 객체는 살아있는데 그 객체에 대한 모든 바인딩이 해지된 것을 C 계열 언어
에서는 메모리 누출이라고 한다.이름과 객체 사이의 바인딩 생명 주기가 객체보다 긴 경우도 있을 수 있다. 물론 그런 경
우는 프로그램 오류일 가능성이 높다.
더 이상 살아있지 않은 객체에 대한 참조를 댕글링 참조(dangling
reference)라고 한다.동적객체의 바인딩 생명주기
객체 생성후, 이름이 그 객체에 바인딩되며,
free로 객체를 해지하고, = null로 바인딩을 하지한다.
스택은 객체와 바인딩이 거의 동시에 일어난다.해지된 객체에 바인딩이 남아있으면 * 댕글링 참조
- 해지된 객체를 가리키는 변수
- 스택 객체의 주소를 가지는 변수
- 바인딩 생명주기가 객체생명주기보다 길어짐
바인딩이 사라지고 객체가 해지되지 않으면
- 메모리 누출
- 이로인한 메모리 부족으로 프로그램 종료
의 문제점이 생긴다.
728x90'프로그래밍언어론' 카테고리의 다른 글
선언과 정의 (0) 2023.04.09 범위규칙 (0) 2023.04.09 힙 할당과 가비지 컬렉터 (0) 2023.03.27 상수에 대한 간단한 고찰 (0) 2023.03.22 메모리 영역 (2) 2023.03.20