실무적인 지식만 갈구하고 있었는데, 어느 한 사람에게 이런 말을 들었다.
"옆으로 넓은 개발자보다, 세로로 깊숙한 개발 공부를 해"
"여러 가지 기술을 경험해보는 것보다 한 가지 기술을 깊숙하게 파고들어 공부하는 것이 중요해"
그래서 다시 초심으로 돌아와 Java를 공부하고 Java 8의 함수적 프로그래밍과 관련된 것들에 대해 조금 더 집중해보려 한다.
이번 학기에 첫 web 만드는 설계과목도 있으니 거기서 적용하면 좋을 것 같다!(이번 내용은 관계 없다)
'자바의 정석 3rd Edition' 인용
JVM을 직역하면, '자바를 실행하기 위한 가상 기계'이다. '자바를 실행하기 위한 가상 컴퓨터' 정도로 이해하면 좋을 것 같다.
Virtual Machine은 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이며, 컴퓨터의 성능이 향상됨에 따라 점점 더 많은 하드웨어들이 소프트웨어화되어 컴퓨터 속으로 들어오고 있다.
다시 말해, Virtual Machine은 Virtual Computer로 생각할 수 있고, Virtual Computer는 실제 컴퓨터(Hardware)가 아니라 Software로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터이다.
Java application vs 일반 application
0. java app
| Java 애플리케이션 |
| JVM |
| OS(Windows) |
| 컴퓨터(Hardware) |
1. 일반 app
| 일반 애플리케이션 |
| OS(Windows) |
| 컴퓨터(HW) |
위 그림과 같이 Java로 작성된 애플리케이션은 모두 이 가상 컴퓨터인 JVM에서만 실행되기 때문에, Java Application이 실행되기 위해서는 반드시!! JVM이 필요하다.
일반 Application 코드는 바로 OS만 거치고 HW로 전달되는데
Java Application 코드는 OS이전에 JVM을 한 번 거친다.
또한, Java application은 HW에 맞게 완전히 컴파일된 상태가 아니라 실행 시에 해석(interpret)되기 때문에
Java가 느린 것이다.
※요즘에는 바이트 코드(컴파일된 자바코드)를 HW의 기계어로 바로 변환해주는 JIT(Just-In-Time)컴파일러와 향상된 최적화 기술이 적용되어서 속도의 격차를 많이 줄였다.
위 그림(표?)에서 볼 수 있듯
일반 app : OS와 바로 맞붙어 => OS에 종속적
Java app: JVM하고만 상호작용 => OS에 독립적 => 다른 OS에서도 프로그램의 변경없이 실행이 가능!!
(단, JVM은 OS에 종속적이기에 실행하고자 하는 OS에서 실행 가능한 JVM이 필요하다.)
| Java Applicaiton |
| Windows용 JVM |
| OS(Windows) |
| 컴퓨터(HW) |
| Java Applicaiton |
| Macintosh용 JVM |
| OS(Macintosh) |
| 컴퓨터(HW) |
| Java Applicaiton |
| Linux용 JVM |
| OS(Linux) |
| 컴퓨터(HW) |
이렇게 함으로써 자바의 장점인
"Write once, run anywhere"가 가능한 것이다.
'Java' 카테고리의 다른 글
| 정적 팩토리 메서드를 왜 사용할까? (1) | 2024.01.24 |
|---|