책/스프링 입문을 위한 자바 객체 지향의 원리와 이해

02. 자바와 절차적/구조적 프로그래밍

개발하는 민우 2022. 3. 18. 16:56

이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다.


 

JDK : Java Development Kit / 자바 개발 도구

JRE: Java Runtime Environment / 자바 실행 환경

JVM: Java Virtual Machine / 자바 가상 기계

 

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

-> 코드 실행 영역 / 데이터 저장 영역으로 나뉨

자바에서는 왜 goto를 사용하지 못하게 한 것일까?

goto를 사용하게 되면 프로그램의 실행 순서가 인간이 이해하기에 너무 복잡해질 가능성이 있음.

함수는 객체 지향 언어에서라면 메서드와 같은 것

함수와 메서드는 다르지 않다.

 

다시 보는 main() 메서드: 메서드 스택 프레임

스태틱 영역 - 클래스들의 놀이터

스택 영역 - 메서드들의 놀이터

힙 영역 - 객체들의 놀이터

 

main() 메서드 실행 준비 1단계 - java lang 패키지를 T 메모리 스태틱 영역에 배치

main() 메서드 실행 준비 2단계 - 클래스와 임포트 패키지를 T 메모리 스태틱 영역에 배치

 

변수를 위한 공간은 main() 메서드 스택 프레임 안에 변수 공간을 마련함.

 

블록 구문과 메모리: 블록 스택 프레임

if는 조건에 따라 분기를 일으키는데, if문의 여는 중괄호를 만나면 if문, 참인 블록의 스택 프레임이 만들어짐.

 

지역 변수와 메모리: 스택 프레임에 갇혔어요!

지역 변수: 스택 영역의 스택 프레임의 존재

클래스 멤버 변수: 스태틱 영역에서 보냄, 스태틱 영역에 한번 자리 잡으면 JVM이 종료될 때까지 고정된(static) 상태를 가짐

객체 멤버 변수: 힙에서 일생을 보냄, 객체와 함께 가비지 컬렉터라고 하는 힙 메모리 회수기에 의해 없어짐

외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나, 그 역은 성립한다.

 

메서드 호출과 메모리: 메서드 스택 프레임 2

메서드 스택 프레임에서 다른 메서드 스택 프레임의 내부 변수는 접근 불가

(자바에는 포인터가 없기 때문) 

메서드를 호출할 때마다 해당 메서드의 스택 프레임이 생긴다.

 

전역 변수와 메모리: 전역 변수 쓰지 말라니까요!

변수가 static 키워드를 가지고 있어, T 메모리의 스태틱 영역에 변수 공간이 할당됨.

1. 스택 프레임에 종속적인 지역 변수

2. 스택 프레임에 독립적인 전역 변수

 

전역 변수를 왜 쓰지 말까?

-> 프로젝트 규모에 따라 코드가 커지면서 여러 메서드에서 전역 변수의 값을 변경하면, T 메모리로 추적하지 않는 이상 전역 변수에 저장돼 있는 값을 파악하기 쉽지 않음.

대신 읽기 전용 전역 상수를 써라.

 

멀티 스레드 / 멀티 프로세스의 이해

멀티 스레드는 스택 영역을 스레드 개수만큼 분할해서 사용

멀티 프로세스는 다수의 T 메모리를 갖는 구조

서블릿은 요청당 프로세스가 아닌 요청당 스레드를 생성하여 더 효율적임

쓰기 가능한 전역 변수를 쓰면 스레드 안정성이 깨짐.

 

  • 스태틱: 클래스의 놀이터
  • 스택: 메서드의 놀이터
  • 힙: 객체의 놀이터