자바 프로그램 구성

  • JDK(Java Development Kit)
    • JVM용 소프트웨어 개발 도구
    • 자바 컴파일러(javac.exe)포함
  • JRE(Java Runtime Environment)
    • JVM용 OS
    • 자바 프로그램 실행기(java.exe)포함
  • JVM(Java Virtual Machine)
    • 가상 컴퓨터
  • 포함관계: JVM < JRE < JDK
  • Write once Run Anywhere 특성을 지님

절차적/구조적 프로그래밍과 자바

  • 객체 지향 프로그래밍도 절차적/구조적 프로그래밍을 기반으로 만들어졌다.
  • 절차적 프로그래밍(PP)
    • 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
    • 프로그램의 흐름 파악 용이
    • 각 코드의 유기성이 높아 유지보수 어렵다
    • goto문을 사용하지 마라!
    • 자바에서는 goto문 사용을 금지하기 위해 예약어로 선점해놨다.
  • 구조적 프로그래밍
    • 함수를 사용해라!
    • 중복코드 관리 용이
    • 논리를 함수 단위로 분리해서 이해하기 쉬움
    • 전역 변수보다는 지역 변수를 사용!
    • 자바에서는 함수 = 메서드(클래스 안에만 존재)
    • 객체지향에서는 클래스 외부에 존재할 수 있는 것은 없다.

프로그램의 메모리 사용 방식

  • 코드 실행영역데이터 저장 영역으로 나눠진다.
  • 데이터 저장 영역은 Static영역, Stack영역, Heap영역으로 나눠진다.

image

  • Static 영역
    • 작성한 Class 및 import package들이 속한다.
    • java.lang 패키지는 반드시 포함
    • 클래스 멤버 변수는 JVM이 종료시 소멸
    • 전역 변수(공유 변수) 공간 할당, 전역 변수를 통해 메서드 사이에 값을 주고 받을 수 있지만 사용하지 마라! 읽기 전용으로 전역 상수로 사용
  • Stack 영역
    • 메서드들이 속한다.
    • 여는 중괄호 '{'를 만날 때마다 스택 프레임 생성
      닫는 중괄호 '}'로 스택 프레임 소멸
    • 스택 프레임의 맨 밑에 반환 값을 저장할 변수 공간 할당
      그 위에 메서드 인자의 변수 공간 할당
      그 위에 지역 변수 공간 할당
    • 지역 변수는 스택 프레임이 소멸시 같이 소멸
    • 지역 변수는 별도의 초기화가 없으면 쓰레기 값을 갖게된다.
    • if 블록 스택 프레임도 존재
    • 외부 스택 프레임에서 내부 스택 프레임 변수에 접근하는 것은 불가능
      그 역은 가능하다.
    • 두 메서드 사이에서 값을 주고 받는 방법은 메서드 인자와 반환 값으로만 가능(Call By Value)
    • 자바에서 main() 메서드가 끝나는 것은 프로그램 종료를 의미
      = JRE 종료 & 메모리상에서 JVM이 사라짐
  • Heap 영역
    • 객체들이 속한다.
    • 객체 멤버 변수는 객체와 함께 가비지 컬렉터에 의해 소멸

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

  • 멀티 스레드
    • 스택 영역을 스레드 개수만큼 분할해서 사용
    • 스택 영역에는 접근할 수 없지만 스태틱과 힙 영역은 공유
      그래서 멀티 프로세스 대비 메모리를 적게 사용
    • 전역 변수 사용시 스레드 안정성이 깨짐
  • 멀티 프로세스
    • 다수의 데이터 저장 영역을 갖는 구조
    • 서로 참조할 수 없는 구조
    • 메모리 영역을 침범할 수 없어 안전한 대신 메모리 사용량이 크다.

출처: 김종민, ⌜스프링 입문을 위한 자바 객체 지향의 원리와 이해⌟ 위키북스

Leave a comment