본문 바로가기
스프링

SPRING(2) - 메모리영역의 구분

by 고유빙글 2021. 7. 27.

프로그램이 메모리를 사용하는 방식

 

좌는 코드실행 영역, 우는 데이터 저장 영역 이다.

 

자바는 객체 지향 언어 이지만, 절차적, 구조적 프로그래밍의 일부를 포함하고 있다. 해당 부분만 간단히 짚고 가겠다.

 

절자척 프로그래밍은 한마디로 goto를 사용하지 말라는 것. 이유는 프로그램의 실행순서가 인간이 이해하기에 너무 복잡해질 우려가 있기때문이다. 이러한 이동이 잦아지면, 소스를 이리저리 따라가면서 프로그램을 이해해야하는데, 만만한 작업이 아니다. 프로그램을 잘 구성하면, goto의 이용을 피할 수 있다.

이러한 점 때문에 자바는 goto를 사용하지 못하게끔 예약어로 등록해두었다. 

공식문서에서도 not used로 표현되어있다.

 

cons의 역할도 final이 대신하기에 not used로 되어있다.

 

구조적 프로그래밍은 함수를 사용하라는 것이다. 함수를 |쓰면 좋은 이유는 중복코드를 모아서 관리할 수 있고, 논리를 함수단위로 분리해서 이해하기 쉬운 코드를 작성할 수 있기 때문이다.

 

이에 더해, 구조적 프로그래밍의 지침 중에는 공유 사용시 문제가 발생하기 쉬운 전역 변수보다는 지역 변수를 사용하라는 것도 있다.

 

이러한 절차적, 구조적 프로그래밍은 자바의 순서도와 제어문에서 사용된다. 

 

함수는 메서드와 동일하게 생각하면 된다.

 

 

 

상기의 메모리 영역을 들여다보자.

 

우선 

Static 영역 : 클래스들의 놀이터

Stack 영역 : 메서드들의 놀이터

Heep 영역 : 객체들의 놀이터

 

이다. 

 

java가 실행되면.

jre는 main()메서드가 있는지 확인한다. 클래스내부에서 jre는 main()의 존재를 확인하고, 프로그램 실행준비를 한다.

jvm에 전원을 넣어 부팅하고 목적파일을 받아 목적파일을 실행한다.

jvm이 제일 먼저 하는 일은 전처리라는 과정으로, 모든 자바 프로그램이 반드시 포함하게되는 java.lang패키지를 static영역에 가져다 놓는다.

 

다음으로 jvm은 개발자가 작성한 모든 클래스와 임포트 패키지 역시 statci영역에 가져다 놓는다. 그래서 static영역을 클래스들의 놀이터라 한다. 

이로서 전처리 과정이 종료된다.

 

이러한 과정과 방식으로 각 메모리 공간에 필요한 것들이 위치하게 되고이에는 jre jvm이 활약하게 된다.

 

-----------------------------------------------------------------------------------------------------------------------------------

추가로 static은 고정된이라는 뜻을 갖고 있고, main()이 실행되기 전부터, 후까지 메모리게 단단히 고정되어 있어 static영역이라 하고

 

stack 영역은 자료구조의 stack구조를 살펴보면 된다. 

 

heep 영역역시 자료구조를 참고하면 좋다. 대용량 자료를 저장할 수 있도록 메모리를 활용하는 방식이다.