아래 글은 공부를 위해 객체지향의 원리 및 이해를 정리한 것 입니다.
📃 참고도서
# 프로그램이 메모리를 사용하는 방식
코드 실행 영역 | 데이터 저장 영역 |
# 객체지향 프로그램의 메모리 사용 방식
코드 실행 영역 | 스태틱(Static) 영역 | |
스택(Stack) 영역 | 힙(Heap)영역 |
# main() 메서드: 메서드 스택 프레임
- main() 메서드는 프로그램이 실행되어 시작되고 끝나는 곳이다.
public class Start {
public static void Main(String[] args) {
System.out.printIn("Hello OOP!");
}
}
위 코드가 실행 될 때 메모리 변화
스태틱 영역 - 클래스들의 놀이터 | |
스택 영역 - 메서드들의 놀이터 | 힙 영역 - 객체들의 놀이터 |
* 책의 저자는 위 메모리 구조가 T자와 같다고 해서 T메모리라고 부른다.
main() 메서드가 실행 되기 전 JVM에서 수행하는 전처리 작업들
- java.lang 패키지를 T 메모리의 스태틱 영역에 배치한다.
- import된 패키지를 T 메모리의 스태틱 영역에 배치한다.
- 프로그램 상의 모든 클래스를 T 메모리의 스태틱 영역에 배치한다.
- main() 메서드가 돌기 위해 스택 프레임(Stack frame)이 스택 영역에 할당
=> 메서드들의 놀이터는 스택(Stack) - 2번째 줄의 블록 시작 기호인 여는 중괄호를 만났을 때 main() 메서드의 스택 프레임이 생긴다.
=> 반대로 닫는 중괄호를 만나면 스택 프레임이 소멸된다.
- 메서드의 인자 args를 저장할 변수 공간을 스택 프레임의 맨 밑에 확보한다.
=> 메서드 인자(들)의 변수 공간을 할당 - JRE는 눈에 보이지는 않게 뒤에서 JVM이라고 하는 자바 가상 기계를 부팅하고,
JVM은 메모리 구조를 만들고 거기에 java.lang패키지 로딩, 각종 클래스 로딩, main() 메서드 스택 프레임 배치,
변수 공간 배치 등등의 일을 처리 - System.out.printIn("Hello OOP!") 구문이 실행 되면 T 메모리에는 변화가 없다.
- 메모리에는 코드 실행 공간은 별도로 있다.
- System.out.printIn() 구문이 코드 실행 공간에서 실행되면 GPU(그래픽 처리 장치)에 화면 출력을 의뢰한다.
=> 이때 데이터 저장 공간인 T 메모리에는 아무런 변화가 없다.
반응형
'프로그래밍언어 & 프레임워크 > 자바(Java)' 카테고리의 다른 글
다형성(polymorphism): 사용편의성 (0) | 2021.09.27 |
---|---|
상속 : 재사용 + 확장 (0) | 2021.09.20 |
추상화 : 모델링 (0) | 2021.09.16 |
클래스 vs 객체 = 붕어빵틀 vs 붕어빵??? (0) | 2021.09.15 |
객체 지향은 인간 지향이다 (0) | 2021.09.14 |