
이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다.
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 메모리를 갖는 구조
서블릿은 요청당 프로세스가 아닌 요청당 스레드를 생성하여 더 효율적임
쓰기 가능한 전역 변수를 쓰면 스레드 안정성이 깨짐.
- 스태틱: 클래스의 놀이터
- 스택: 메서드의 놀이터
- 힙: 객체의 놀이터
'책 > 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
06 스프링이 사랑한 디자인 패턴 (0) | 2022.04.08 |
---|---|
05 객체 지향 설계 원칙 - SOLID (0) | 2022.04.08 |
04 자바가 확장한 객체 지향 (0) | 2022.03.25 |
03 자바와 객체 지향 (0) | 2022.03.25 |
01. 사람을 사랑한 기술 (0) | 2022.03.18 |