🌱 오늘의 주제 : 자바와 절차적 / 구조적 프로그래밍 (1)
🌱 자바 프로그램의 개발과 구동
현실 세계 | 가상 세계(자바 월드) | |
소프트웨어 개발 도구 | JDK - 자바 개발 도구 | JVM용 소프트웨어 개발 도구 |
운영체제 | JRE - 자바 실행 환경 | JVM용 OS |
하드웨어 - 물리적 컴퓨터 | JVM - 자바 가상 기계 | 가상의 컴퓨터 |
(현실 세계 vs 가상 세계)
- JDK, JRE, JVM은 편의를 위해 JDK가 JRE를 포함하고 다시 JRE는 JVM을 포함하는 형태이다.
- 자바의 특성 : Write Once Run Anywhere
- JDK : Java Development Kit / 자바 개발 도구
- JRE : Java Runtime Environment / 자바 실행 환경
- JVM : Java Virtual Machine / 자바 가상 기계
코드 실행 영역 | 스태 틱(Static) 영역 | |
스택(Stack) 영역 | 힙(Heap) 영역 |
(객체 지향 프로그램의 메모리 사용 방식)
🌱 자바에 존재하는 절차적/구조적 프로그래밍의 유산
자바에서 goto를 사용하지 못하게 하는 이유
- goto를 사용하게 되면 프로그램의 실행 순서가 인간이 이해하기에 너무 복잡해질 가능성이 있기 때문이다.
구조적 프로그래밍이란 ?
- 함수를 쓰라는 것이다.
함수를 쓰면 좋은 이유는?
- 중복 코드를 한 곳에 모아서 관리할 수 있고, 논리를 함수 단위로 분리해서 이해하기 쉬운 코드를 작성할 수 있기 때문이다.
객체 지향 프로그래밍에서 제어문이 존재할 수 있는 유일한 공간은?
- 메서드 내부이기 때문이다.
함수와 메서드의 차이점은?
- 전혀 다르지 않다. 절차적/구조적 프로그래밍에서 함수라 불렀는데 객체 지향에서는 메서드라고 불렀다.
🌱 다시보는 main() 메서드: 메서드 스택 프레임
스태틱 영역 - 클래스들의 놀이터 | |
스택 영역 - 메서드들의 놀이터 | 힙 영역 - 객체들의 놀이터 |
< T 메모리 구조>
java.lang | |
<main() 메서드 실행 준비 1단계 - java.lang 패키지를 T메모리 스태틱 영역에 배치.>
java.lang // start - main(args : String[]) | |
<main() 메서드 실행 준비 2단계 = 클래스와 임포트 패키지를 T메로리 스태틱 영역에 배치
* 정리 *
< main() 메서드가 실행되기 전 JVM에서 수행하는 전처리 작업들 >
- java. lang 패키지를 T 메모리의 스태틱 영역에 배치한다.
- import된 패키지를 T 메모리의 스태틱 영역에 배치한다.
- 프로그램 상의 모든 클래스를 T 메모리의 스태틱 영역에 배치한다.
🌱 System.out.print () 구문이 실행 후
java.lang // start - main(args : String[]) | |
main() 스택 프레임 // args |
🌱 변수와 메모리: 변수! 너 어디 있니?
java.lang // start - main(args : String[]) | |
main() 스택 프레임 , d - 20. 0, i - 10, args - |
public class Start2 {
public static void main(String[] args) {
int i;
i = 10;
double d = 20/0;
}
}
🌱 느낀점
자바 프로그램의 개발과 구동의 원리를 현실 세계와 비교해서 보니 훨씬 이해가 잘 됬다.
자바 가상 기계를 만들어낸 사람들의 천재성을 존경하게 되었다.
여기서 다시 객체 지향 프로그램의 메모리 사용 방식을 스태틱, 스택, 힙 영역으로 나누고, 메서드가 실행 될 때마다 각 영역에서 실행되는 부분이 다르다는 것도 처음 알게 되었다.
스태틱 영역은 클래스들의 놀이터, 스택 영역은 메서드들의 놀이터, 힙 영역은 객체들의 놀이터라고 작가가 말씀하셔서, 이 부분이 인상 깊었다.
무심코 썼던, 클래스, 객체, 메서드들이 어디서 작동하는지 알게 되는 계기가 된 것 같다.
'Spring > Book - 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
03. 다형성: 사용편의성 (0) | 2023.03.16 |
---|---|
03. 자바와 객체 지향(2) (0) | 2023.01.27 |
03. 자바와 객체 지향 (1) (0) | 2023.01.17 |
02. 자바와 절차적 / 구조적 프로그래밍 (2) (0) | 2023.01.10 |
01. 사람을 사랑한 기술 (0) | 2023.01.03 |