[CS] Q3. 스택, 힙 메모리란 무엇이며 어떤 차이가 있는지 비교해서 설명해주세요.
👉 프로그램이 시작되기 위해서는 프로그램이 메모리에 Load되어야 한다.
이때 프로그램이 사용하는 변수들을 저장하는 공간도 필요함
프로그램이 운영체제로부터 할당받는 대표적인 메모리공간
1. 코드영역
2. 데이터영역
3. 스택영역
4. 힙영역
스택(Stack)영역
- 함수의 호출과 관련된 지역변수와 매개변수가 저장되는 영역
- 함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸한다. → 잠깐 사용하고 삭제
Push
동작으로 데이터를 저장하고 Pop
동작으로 데이터를 인출
- 후입선출(LIFO, Last-In First-Out)방식으로 동작 → 가장 늦게 저장된 데이터가 가장 먼저 인출
- 힙(Heap)보다 빠름
힙(Heap)영역
- 사용자가 직접 관리해야하는 메모리 영역
- 사용자에 의해 동적으로 할당되고 해제됨
- 스택(Stack)보다 큰 메모리를 할당받기 위해 사용
Delete
를 사용하여 해당 객체 메모리를 반환
[Android] Q3. Fragment 생명주기는 어떻게 구성되어 있나요?
onAttach()
→ onCreate()
→ onCreateView()
→ onViewCreate()
→ onViewStateRestored()
→ onStart()
→ onResume()
→ onPause()
→ onStop()
→ onDestroyView()
→ onDestroy()
→ onDetach()
👉 그림으로 나타내면 다음과 같다.
1. onAttach()
- 프래그먼트가 액티비티에 붙을 때 호출
- Context를 인자로 사용한다.
2. onCreated()
- 액티비티의 호출을 받아서 생성
- Bundle을 통해 액티비티로부터 데이터를 받아옴
3. onCreatedView()
4. onViewCreated()
- LifeCycle이 INITIALIZED 상태로 업데이트
onCreateView()
를 통해 반환된 View의 객체가 onViewCreated()
의 파라미터로 전달
- 여기서 View의 초기값 설정, LiveData옵저빙, Adapter세팅을 해주는 메소드
5. onViewStatRestored()
- 저장해둔 state값이 View의 계층 구조에 복원되었을때 호출
- ex) 체크박스가 현재 체크가 되어있는가 ...
- LifeCycle이 INITIALIZED → CREATED 상태로 업데이트
6. onStart()
- 유저에게 보여질 수 있을때 호출
- FragmentTransaction을 안전하게 수행 가능
- LifeCycle이 CREATED → STARTED 상태로 업데이트
7. onResume()
- 프래그먼트와 상호작용이 가능한 상태일때 호출
- 프래그먼트에 보이는 모든 Animator, Transition효과가 종료되고, 사용자가 상호작용 할수 있을때 onResume CallBack 수행
8. onPause()
9. onStop()
- 프래그먼트가 더이상 화면에 보이지 않을때 호출됨
- 부모 액티비티, 프래그먼트가 중단될때 혹은 상태가 저장될때 호출
- LifeCycle이 STARTED → CREATE 상태로 업데이트
10. onDestroyView()
- 모든 exit anoimation, transaction이 완료, 프래그먼트가 화면으로부터 벗어났을때 호출
- LifeCycle이 CREATE → DESTROYED 상태로 업데이트
- 프래그먼트 View에 대한 모든 참조가 제거되어야 함
11. onDestroy()
- 프래그먼트가 제거되거나 FragmentManager가 destroy되었을 경우 호출
- LifeCycle의 끝
12. onDetach()