일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 옵저버 패턴
- material3
- 함수형프로그래밍
- Abstract Factory
- android designsystem
- Design Pattern
- 디자인패턴
- 추상팩토리패턴
- factory method
- Functional Programming
- PrototypePattern
- 싱글톤
- 빌터패턴
- 프로토타입 패턴
- ㅋㅁ
- r
- 코틀린
- 디자인패턴 #
- 팩토리 메소드
- 추상 팩토리
- 안드로이드 디자인시스템
- Singleton
- designPattern
- ㅓ
- El
- builderPattern
- compose
- Observer Pattern
- F
- Kotlin
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
RunTime시 메모리에 대한 이해 feat. kotlin 본문
RunTime시 Ram(메모리)에 코드가 어떻게 저장되고 사용되는지 알아보자
* 기본적으로 알아야 하는 지식.
- val / var (kotlin에서 사용하는 key word)
val - 변경 불가능한 참조를 저장하는 변수(초기화 이후 저장된 것을 바꿀수 없다.)
var - 변경 가능한 참조를 저장하는 변수.
- args / params
params - 함수를 정의할때, Input 값으로 받을 타입와 갯수를 정의한 함수의 시그니쳐중 하나.
args - 정의된 함수를 호출할때, 실제로 넣어주는 값.
/*
Function definition
a, b parameters
*/
fun add(a: Int, b: Int): Int{
val c = a + b
return c
}
// main 함수 - 프로그램 시작의 진입점
fun main() {
// Function call (4, 10 argument)
add(4, 10)
}
- 메모리의 영역
실제 메모리의 공간을 추상화하여 보자!
JVM은 실행될 클래스 파일(xxx.class)을 메모리에 로드 후 초기화 작업을 수행
1. Code 영역
- 실제 코드(기계어)가 저장되는 곳.
- CPU에서 각 줄의 명령어를 순차적으로 실행하며, 프로그램 시작부터 끝까지 사용된다.
2. Data 영역
- 전역(Global) 변수, 정적(Static) 변수가 프로그램 시작과 초기화 된다. 종료후 해제됨.
- 프로그램 전반에 걸쳐서 사용할 데이터를 저장하는 곳이다.
* Bss 영역에는 초기화되지 않은 전역 변수가 저장
3. Heap 영역 (RunTIme에 동적으로 할당되는 영역)
- 사용자의 Application 사용방법에 따라 생성된 객체를 저장한다.
- C언어와 같이 개발자가 직접 할당 및 해제가 가능하기도 하지만 JVM위에서 실행되는(java, kotlin)는
Garbage Collector가 특정 기준을 가지고 자동으로 메모리공간을 해제 시킨다.
- 상속관계가 있는 객체를 생성 및 초기화를 하면 모두다 이곳에 저장됨. (java, kotlin)
4. Stack 영역 (Complie에 크기가 정해진다.)
- main function(프로그램의 시작점)을 기준으로 호출되는 Function Call(객체의 Method 포함)하여
함수를 실행에 필요한 것(local 변수, 매개변수, 리턴 값)들을 저장한다.
- 각 함수별로 stack segment로 나누어져서 저장되었다가 함수 호출이 종료되면, 호출된 역순(LIFO)으로 메모리에서 해제된다.