수리 공작소

[쉽게 배우는 자바 프로그래밍] 1장 정리 본문

Algorithm/JAVA

[쉽게 배우는 자바 프로그래밍] 1장 정리

suleee 2023. 4. 6. 17:46

JAVA의 역사

[개발]

선마이크로칩스의 James Gosling이 이끄는 팀

제임스 고슬링

[개요]

당시 미국 대선에 출마한 Al Gore의 공약 중, information highway라는 공약이 있었다. 

이에 영감을 얻어 제임스 고슬링의 초기 아이디어로는 가전 제품 부착용 프로그래밍 언어를 만들어보자는 시도를 했음.

(왜 기존의 언어를 사용하지 않고? -> 가전 제품과 컴퓨터는 사용 대상 자체가 다르므로 다른 특성을 가져야한다고 생각.)

그래서 제임스 고슬링의 design goal은 다음과 같았다.  

https://alvinalexander.com/java/misc/4days_dd/node47.shtml

컴퓨터용 언어인 C언어보다 쉽고, 안전하고, 객체 지향인 언어를 만드는 것이었다. 

 

하지만 Al Gore가 낙선을 하게 되고 원래 목표하던 가전 제품 대상의 언어로 사용하기 어려워졌다. 하지만 그때 "웹"의 급부상(1993)이 일어나면서 Oak를 인터넷 환경에 적합하도록 재설계한 뒤, JAVA라는 이름으로 발표하였다.

현재는 선마이크로시스템즈를 오라클이 인수하여 오라클이 자바 플랫폼을 지원하게 되었다.

 

[JVM(자바 가상 머신)]

자바의 최대 장점 중 하나는 이식성이 좋다(portable)는 것이다. 좀 다르게 말하면 플랫폼 독립적(운영체제에 종속되지 않고 사용 가능)이다.

 

고급 언어는 컴파일을 통해 컴퓨터가 이해할 수 있는 저급언어로 변환을 해야한다. 그런데 여기서 사용하는 운영체제가 다르면, 운영체제 별로 사용하는 API 혹은 메모리를 관리하는 방식이 다르기 때문에 프로그램이 모든 컴퓨터에서 원활하게 돌아가지 않을 수도 있다.

그리고, CPU에 따라서도 사용하는 기계어 종류가 다른 점도 그 이유가 될 수 있다.

 

자바는 모든 운영체제에서의 프로그램 실행을 보장하기 위해 JVM이라는 가상머신을 사용하게 되었다. 

JVM의 작동

 

  1. 먼저, JAVA에서 사용하는 컴파일러는 javac를 이용하여 .class라는 확장자를 가진 바이트 코드(자바에서 사용하는 중간 단계 코드) 파일을 생성한다. 
  2. 각 운영체제에 맞는 JVM이 바이트 코드 파일을 각각의 운영체제에서 사용하는 실행 파일로 해석한다.

또, JAVA에서는 운영체제가 메모리를 직접 관리하지 않고, JVM이 그 역할을 대신 수행한 그 이유를 chat GPT에게 물었더니 이러한 답이 나왔다.

첫번째는 역시나 이식성에 관한 이야기였고,

두번째 Garbage Collection은 자바의 동적할당과 관련이 있어보인다.

C++과 C에서 동적할당 명령어 malloc과 new를 사용하면 반드시 해당 메모리 사용이 끝날시에 free 혹은 delete을 해주어야 혼란이 없다. (그렇지 않을 경우 메모리 누수 memory leak 혹은 허상 참조 dangling reference와 같은 문제가 발생할 수 있기 때문이다.)

간단히 말해

메모리 누수(memory leak)은 해제되지 않은 메모리가 쌓이는 것을 말하고

허상 참조(dangling reference)는 이미 해제된 메모리에 대한 포인터(통로)를 남겨놓아 계속 참조가 되는 현상이다. 

 

자바의 JVM은 이러한 것을 최대한 방지하기 위해 자동 메모리 해제를 시켜주는 Garbage Collector라는 기능을 사용하는 것이다. 때문에 자바에서는 new와 delete 같은 메모리 해제 명령어를 사용하지 않는다. 

 

[JVM 사용의 장점과 단점]

장점 : 어느 컴퓨터에서는 사용 가능하므로 편의성과 이식성이 높다.

단점 : 거쳐야 할 단계가 하나 늘어나므로 C언어에 비해 속도가 느려진다.

 

 

 

 

 

+번외)

javascript와 JAVA의 이름이 비슷한 이유?

결론 : 마케팅 때문에

그렇다고 한다.