생각을 개발하자, 박진형

[Java] 자바 시작! - 왜? 자바 특징, JRE, JDK, JVM 살펴보기 본문

Java/java basic

[Java] 자바 시작! - 왜? 자바 특징, JRE, JDK, JVM 살펴보기

imjinbro imjinbro 2017.09.01 03:03

[자바를 다시 하는 이유]

- 일단 재밌다 : 내가 재밌어하고 하고 싶어하니깐 더 잘할 수 있을 것 같았음
- 처음 접한 언어가 자바
- 다시 해보고 싶은 마음이 들었음
- 범용성 : 안드로이드 개발 뿐만 아니라 웹 등 여러 곳에서 사용할 수 있음 - 국내 다수의 기업에서 자바를 사용
- 이식성 : 동일한 코드 다른 곳에서 사용!
-  자바스크립트에 대한 약간의 불만 : 디버깅, 지금은 컨텍스트, 변수객체, 스코프 등등 알고있어서 실수없이 잘하지만 그래도 찝찝함이… 똑 부러지는 언어를..
- 더 빠져보고 싶은 생각
- 그래서 시작!


[자바의 특징]
- 언어의 특징을 아는 것은 매우 굉장히 엄청 중요하다!

(1) 오크(Oak) 라는 언어에서 부터 시작 : 가전제품에서 사용될 목적
(2) 이식성이 뛰어남 : 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행
- JRE : 자바 런타임 환경이 설치되어있는 모든 운영체제에서 자바 소스코드 변경없이 동일하게 실행 가능함(다시 컴파일X)
- JRE : JVM 설치(자바 프로그램 실행에 필요한 JVM, 개발에 필요한 JVM은 JDK를 설치해야함) + 표준 클래스 라이브러리
- 자바 소스 파일 -> 바이트코드로 변환 -> JRE가 설치된 운영체제라면 문제없이 똑같이 실행

(3) 다양한 어플리케이션 개발 : 금융, 공공, 대기업 등의 엔터프라이즈 기업 환경에서 실행되는 서버, 모바일 어플리케이션 등등등
- 자바 에디션 : JVM + 다양한 운영체제에서 사용할 수 있는 개발도구 + API(표준 클래스 라이브러리)를 묶은 것
- JDK : Java SE 구현체(실체!)
- Java SE(Standard Edition) : 자바 기본 에디션, JVM + 개발에 필수적인 도구 +  API(표준 클래스 라이브러리) 제공
- Java EE(Enterprise Edition) : 서버용 어플리케이션 개발 에디션, Sevlet/jsp 웹 어플리케이션, EJB(Enterprise Java Bean), XML 웹서비스 등이 포함

(4) 객체지향언어 : 추상화(캡슐화, 정보은닉), 상속, 다형성(오버로딩, 오버라이딩), 동적바인딩(런타임 바인딩)
- 부품 -> 조립 + 추상화 : 공통된 속성을 뽑아냄
- 상속 예시 : 동물 -> 포유류 -> 사람(동물이 가지는 공통된 속성, 동물이 가지는 공통된 속성을 가지면서 포유류만 가지는 공통된 속성, - - -)

(5) 가비지컬렉터 메모리 자동 관리 : 물론 완벽하게 하는 것은 아님(“자동적” 이라는게 모호) - 훈련
(6) 멀티쓰레드 쉽게 구현 : 하나의 프로그램이 동시에 여러 작업을 처리하는 것 - 멀티쓰레드
- 운영체제에 따라 멀티쓰레드 구현 방법이 다르지만 자바는 별도 런타임 환경만 갖춰지면 돌아감
- 멀티쓰레드 API 제공(운영체제 상관x)

(7) 동적로딩 지원 : 어플리케이션이 실행될 때 모든 객체가 생성되지않고, 객체가 필요한 시점에 클래스를 동적 로딩해서 객체 생성  
(8) 함수적 스타일 코딩 지원 : 아직 정확하게 잘 모르는 영역, 공부하면서 차차 알아가기(람다식과 관련있다함 - java 1.8)
(9) 오픈소스 라이브러리 짱많 : 좋다좋다


[JVM]
- 이것이 무엇입니까? 그리고 왜 필요한거죠?
(1) 운영체제가 바로 자바프로그램을 돌리지 못함 : 자바 컴파일러(javac)가 자바를 완전한 기계어로 번역하지않고 중간단계의 바이트 코드로 해석
(2) 바이트코드를 해석하고 실행할 수 있는 가상운영체제 역할
(3) 자바를 실행시키는(정확히 말해서 자바 컴파일러가 변환한 바이트코드) 가상의 기계


- 뭐가 좋아요?
(1) 운영체제에 따라 프로그램 실행 - 관리 방법이 모두 다름 : 운영체제별 프로그램 별도 개발 필요성
(2) 운영체제별로 각각 개발하지않고 컴파일러가 바이트코드 변환 -> JVM 위에서 해석, 실행 : 운영체제 상관없이 동일하게 실행
(3) 자바 코드를 짜는데에 더 신경을 쓸 수 있음!


- JVM 
(1) JVM 자체는 운영체제에 종속적 - 운영체제에 맞는 jvm 설치가 되어야함(JDK, JRE 설치하면 자동적으로 설치)
(2) C와 C++ 처럼 컴파일 단계에서 한번에 완전한 기계어로 만들어지지않아 속도가 느림(두번의 단계 - 바이트코드 -> 기계어)
=> 기계어로 빠르게 번역해주는 JVM 내부의 최적화된 JIT 컴파일러로 속도격차가 줄어들고있다함(JIT 컴파일러 찾아보자)


- 앞으로 짤 자바 소스코드는 어떻게 실행이 될까?



[IDE 선택 - 인텔리j]
- 대다수의 사람들 추천
- 안드로이드 스튜디오 사용해본 경험때문에
- 이클립스 키맵핑 선택해서 이클립스에서 사용해봤던 핫키/템플릿을 그대로 사용가능


[자료참고]
- 구글링