Chap2_JavaStudy

Date : 2020.12.20   Modified date : 2020.12.23

2장의 주요 내용 정리

자바의 개발과 구동 방식

JDK를 이용해서 프로그램을 개발하고 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다.

현실세계 가상세계(자바월드)  
소프트웨어 개발 도구 JDK - 자발 개발 도구 JVM용 소프트웨어 개발 도구
운영체제 JRE - 자바 실행 환경 JVM용 OS
하드웨어 - 물리적 컴퓨터 JVM - 자바 가상 기계 가상의 컴퓨터

자바의 특성

JDK는 자바 소스 컴파일러인 javac.exe를 포함하고, JRE는 자바 프로그램 실행기인 java.exe를 포함하고 있다. JVM은 JRE에 의해 구동된다.

이러한 구조를 가지고 있기 때문에 하나의 소스 파일로도 여러 플랫폼에서 자바 프로그램이 실행이 가능하다. 이를 Write Once Run Anywhere 라고 말한다.

JDK를 설치하면 JRE를 포함하고 있고, JVM은 JRE에서 포함하고 있기 때문에 JDK에 설치시 JRE, JVM이 자동으로 설치된다.

  • JDK, JRE, JVM
    • JDK : Java Devleopment Kit / 자바 개발 도구
    • JRE : Java Runtime Environment / 자바 실행 환경
    • JVM : Java Vitual Machine / 자바 가상 기계

자바의 구동 과정

  1. 자바 소스 파일 작성한다. 확장자명 .java
  2. JDK가 가지고 있는 컴파일러(javac.exe)로 바이트코드로 변환한다. 이때 변환된 파일이 .class 확장자인 자바 목적 파일이다.
  3. JRE가 포함하고 있는 java.exe를 이용하여 JVM을 구동 시킨다.
  4. JVM이 바이트코드를 해석하여 자바 프로그램이 실행된다.

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

 프로그램 메모리 사용 방식

객체 지향 프로그램의 메모리 사용 방식

 객체 지향 프로그램의 메모리 사용 방식

goto

JAVA에서는 goto를 예약어로 등록 해두었다. 이유는 goto를 사용하게 되면 프로그램의 실행 순서가 인간이 이해하기에 너무 복잡해질 가능성이 있기 때문이다.

goto를 이용한 이동은 프로그램을 논리적으로 잘구성하면 모두 피할수 있는 것들이다.

함수(Function)와 메서드(Method)

함수나 메서드는 같은 말이지만, 절차적/구조적 프로그래밍에선 함수라 부르며, 객체 지향에서는 메서드라고 부른다.

조금의 차이점은 함수(Function)는 클래스나 객체와 아무 관계가 없지만 메서드(Method)는 반드시 클래스 정의 안에 존재해야 한다.

객체 지향언어에서 클래스 외부에 존재할 수 있는 것은 아무것도 없다고 한다.

main() 메서드가 실행되기 전 JVM에서 수행하는 전처리 작업

  1. java.lang 패키지를 T메모리의 스태틱 영역에 배치한다.
  2. import된 패키지를 T메모리의 스태틱 영역에 배치한다.
  3. 프로그램 상의 모든 클래스를 T메모리의 스태틱 영역에 배치한다.

T메모리란? 위의 이미지 객체 지향 프로그램 메모리 사용방식 구조다.

스택 프레임(stack frame)

main() 메서드가 실행되기 위해 스택 프레임(stack frame)이 스택 영역에 할당된다. 메서드의 여는 중괄호를 만날 때마다 스택 프레임이 하나씩 생긴다.

메서드의 인자를 저장할 변수 공간을 스택 프레임의 맨 밑에 확보한다. 메서드의 변수 공간 할당을 의미한다.

여는 괄호가 중첩되면 스택 프레임 또 한 중첨되어 나타난다.

  • 지역 변수
    • 스택 영역, 스택 프레임이 사라지면 없어진다.
    • 스택 프레임에 종속적이다.
  • 클래스 멤버 변수
    • 스태틱 영역, JVM이 종료되면 없어진다.
    • 스택 프레임에 독립적인 전역 변수.
    • 읽기 전용으로 값을 공유할때 사용하는 것을 추천한다.

중요 : 외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다.

  • main() 메서드 스택 프레임과 인자 변수 공간 main() 메서드 스택 프레임과 인자 변수 공간

  • main() 메서드 종료 이후의 T메모리 상태 main() 메서드 종료 이후의 T 메모리 상태

멀티 스레드 / 멀티 프로세스

  • 멀티 스레드(Multi Thread)
    • 스택 영역을 스레드 개수만큼 분할해서 사용
    • 하나의 스레드에서 다른 스레드의 스택 영역에는 접근 불가, 스태틱 영역과, 힙 영역은 공유해서 사용하는 구조이다.

Multi Thread

  • 멀티 프로세스(Multi Process)
    • 다수의 데이터 저장 영역, 즉 다수의 메모리를 갖는 구조
    • 각 프로세스별 메모리가 있다. 각자 고유의 공간이므로 서로 참조할 수 없다.

Multi Process

참고자료

저자 ‘김종민’님의 스프링 입문을 위한 자바 객체 지향의 원리와 이해

카테고리: