💡 해당 글은 『스프링 입문을 위한 자바 객체지향의 원리와 이해』 도서를 학습하며 도서의 내용을 참고하여 본인의 언어로 표현한 글입니다.
JDK, JRE, JVM
- JDK: 자바를 개발할 수 있는 도구, 자바 파일을 작성하고 컴파일하며, 실행할 수 있다. JRE를 포함
- JRE: 컴파일된 바이트코드를 실행시키기 위한 환경, JVM을 위한 OS라고 생각할 수 있다. JVM을 포함
- JVM: 자바 코드를 실행시키기 위한 가상의 컴퓨터, JRE위에서 동작한다.
JDK는 자바 소스 컴파일러인 javac를 포함하고 JRE는 자바 프로그램 실행기인 java.exe를 포함한다.
자바는 왜 이러한 구조를 채택했을까? 기존에는 어떤 불편함이 있었을까?
기존에는 각 OS마다 배포를 위한 설치 파일이 필요했다. 즉, 내가 작성한 프로그램을 실행시키기 위해 각 OS마다 상이한 배포용 실행 프로그램을 설치해야 하는 불편함이 있었다.
자바는 이런 불편함을 없애고자했다. 하나의 소스파일을 작성하고 모든 OS에서 독립적으로 실행 가능하게 하고 싶었다. 이는 JVM이라는 자바 프로그램을 위한 가상 컴퓨터를 만들어냈다.
이제 개발자는 자신의 플랫폼에 설치된 JDK로 프로그램을 작성하고 배포하면 각 OS의 JVM이 중재자 역할을 하며 프로그램을 문제없이 구동시킬 수 있게 되었다. 이러한 특성을 Write Once Run Anywhere 라고 한다.
JDK를 이용해 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다.
JVM 메모리 영역
JVM은 기본적으로 여러 스레드가 동시에 동작한다. 각 스레드는 메서드와 지역변수를 저장하는 Stack 영역을 가지고 있다. Stack에 저장되는 호출된 메서드 블럭을 Stack frame이라고 한다.
Static, Heap 영역은 모든 스레드가 공유하는 영역이다. Static은 정적 자원이 저장되는 공간이다. 자바 프로그램을 실행시켰을 때, java.lang 패키지와 import된 모든 패키지, 프로그램의 패키지, 상수들이 저장된다. Heap은 객체가 저장되는 영역이다.
Stack Frame
스레드는 메서드를 호출하며 프레임이라는 블럭을 생성한다. 프레임에는 메서드의 파라매터, 지역변수가 저장된다. 각 프레임은 서로의 공간을 참조하지 못한다는 특성을 가진다.
외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다.
Call By Value
메서드를 호출하면서 인자로 전달되는 것은 변수 자체가 아니라 변수가 저장한 값만을 복제해서 전달한다. 이런 전달 방식을 값에 의한 전달이라고 해서 Call By Value라고 한다.
"변수 자체가 아니라 변수가 저장한 값만을 복제해서 전달한다." Call by Value 와 Call by Reference의 차이를 설명하기 가장 적합한 문장인 것같다.
자바에 존재하는 절차적/구조적 프로그래밍 유산
절차적 프로그래밍을 한마디로 표현하자면 goto를 쓰지 말라는 것이다.
자바 객체지향의 원리와 이해 40p.
goto
란 프로그래밍에서 특정한 레이블이나 위치로 실행을 이동시키는 명령어이다. 이를 사용하면 프로그램의 흐름을 비순차적으로 변경할 수 있다. 이러한 goto는 프로그램을 논리적으로 잘 구성하면 모두 피할 수 있다.
자바에서는 이런 goto가 예약어로 등록됨과 동시에 not used 상태이다.
따라서 절차적 프로그래밍은 프로그램을 순차적으로 동작시키는 것을 위미한다.
구조적 프로그래밍은 함수를 이용하여 중복 코드를 한데 모으고, 함수 단위의 이해하기 쉬운 코드를 작성하는 프로그래밍 방법론이다.
반복문의 경우에도 절차적/구조적 프로그래밍의 유산이라고 할 수 있다. 명령어를 논리적인 흐름으로 처리하고 순차적으로 처리하는 특성을 띄기 때문이다.
'JAVA > 자바 객체지향의 원리와 이해' 카테고리의 다른 글
06. 스프링이 사랑한 디자인 패턴 (0) | 2024.01.20 |
---|---|
05. 객체 지향 설계 5원칙 - SOLID (0) | 2024.01.18 |
04. 자바가 확장한 객체 지향 (0) | 2024.01.18 |
03. 자바와 객체지향 (0) | 2024.01.17 |
01. 사람을 사랑한 기술 - 기술의 발전 (0) | 2024.01.17 |