Hun's Blog

[JAVA] JAVA란 무엇인가? 본문

Language/Kotlin & Java

[JAVA] JAVA란 무엇인가?

jhk-im 2020. 3. 21. 22:44

참고

 http://www.itworld.co.kr/news/110817

 

"JDK란 무엇인가" 자바 개발 키트 소개와 설치하기 - ITWorld Korea

자바 개발 키트(Java Development Kit, JDK)는 자바 애플리케이션을 구축하기 위한 핵심 플랫폼 구성요소다. 이 중심에는 자바 컴파일러(Compiler)가 있다.Credit: Nic McPhee (CC BY-SA 2.0)JDK는 자바 가상 머신(Java Virtual Machine, JVM), 그리고 자바 런타임 환경(Java Runtime Environment, JRE)과 함께 자바 프로그래밍에 사용되는 3대

www.itworld.co.kr

이미지1 JAVA

JAVA란 무엇인가? 

Wikipedia를 먼저 살펴보자.
썬 마이크로 시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1995년 발표했고 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 웹 애플리케이션 개발에 가장 많이 사용하는 언어가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다.
자바를 다른 컴파일 언어와 구분 짓는 가장 큰 특징은 컴파일 된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트 코드라는 특수한 바이너리 형태로 변환한다. 바이트 코드를 실행하기 위해서는 JVM이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.

 

음 ...... 이해된듯 아닌듯 확신할 수 없는 그런 느낌이다.

이번에는 Wikipedia에 있는 철학도 살펴보자.
자바 언어는 다음 5가지의 핵심 목표를 지니고있다.
1. 객체 지향 방법론을 사용해야 한다.
2. 같은 프로그램(바이트코드)이 여러 운영체제(마이크로프로세서)에서 실행 될 수 있어야한다.
3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
4. 원격 코드를 안전하게 실행할 수 있어야한다.
5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

역시나 ...... 그래도 위키피디아와 영어버전 위키피디아 그리고 몇가지 블로그 글들을 천천히 정독하여보자.
자주 나오는 키워드를 정리해보고 일단 예제를 실행 하면서 각각의 키워드 들을 다시한번 이해해보도록 하겠다.

<키워드>
바이트코드, JVM, 객체지향, 멀티스레드, 분산환경, 컴파일, 가비지 컬렉터, 동적로딩 , 오픈소스 라이브러리 ......

 

[예제환경 구축]

1. JDK설치 -> 환경변수 설정 -> 설치 확인

사실 설치법은 구글이나 유튜브에서 검색하면 친절하게 나오기 때문에 패스하겠다.
대신 처음 설치할 때 궁금했으나 시간과 마음의 여유가 없어 무심코 지나쳤던 부분에 대해서 조금은 자세히 살펴보도록 하자.

이미지 2 JRE / JDK

 

이미지 3 SE / EE / ME

 

자바 개발 키트(Java Development Kit, JDK) 자바 가상 머신(Java Virtual Machine, JVM), 그리고 자바 런타임 환경(Java Runtime Environment, JRE)과 함께 자바 프로그래밍에 사용되는 3대 핵심 기술 패키지 가운데 하나다. 이 3가지 기술이 어떻게 연결되어 있는지, 또한 어떻게 다른지 구별하는 것이 중요하다. 

JVM은 프로그램을 실행하는 자바 플랫폼 구성요소다.
JRE는 JVM을 생성하는 디스크 상의 부분이다. 
JDK는 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해준다.

JDK가 자바 기반 소프트웨어를 개발하기 위한 도구들로 이뤄진 패키지이고, JRE는 자바 코드를 실행하기 위한 도구들로 구성된 패키지라는 점이 다르다. 
JRE는 자바 프로그램을 구동하기 위한 독립형 구성요소로써 사용될 수도 있지만, 동시에 JDK의 일부이기도 하다. 자바 프로그램을 구동하는 것이 자바 프로그램 개발의 일환이기 때문에 JDK는 JRE를 필요로한다. 

모든 JDK는 자바 애플리케이션 구동에 이용되는 환경이 JRE 뿐만 아니라, 자바 컴파일러도 포함하고 있다.  

아하. 그래서 JDK만 설치를 해도 되는거였군

컴파일러(Compiler)는 평범한 텍스트인 원시(Raw).java 파일을 받아서 실행 가능한 .class 파일로 만드는 기능이 있는 소프트웨어다. 

JDK 패키지는 서로 다른 유형의 개발을 표적으로 하는 자바 개발 키트이다. 이미지3에서 볼 수 있듯 여러가지가 있다. 대표적으로 EE(Enterprise Edition), 자바 SE(Standard Edition), ME(Mobile Edition)이 있다. 초보 개발자는 어떤 패키지를 선택해야하는지 확신이 서지 않을 수 있다. 기본적으로 각각의 패키지는 SE를 포함하고 있다. EE나 ME는 SE에서 추가적인 도구를 가지고 있다고 생각하면 된다. 다른 패키지로 전환하는 것은 어렵지 않다.

일단 이름에 걸맞게 SE로 가고 필요할 때 묻고 더블로 가라

간단한 자바 프로그램 만들기
예전의 방식으로 컴파일하여 실행해보자. 
intro.java라는 새로운 텍스트 파일을 생성하고 목록 1의 코드를 추가한다. 

목록 1. Intro.java
public class Intro {
public static void main(String[] args) {
System.out.println("Welcome to the JDK!");
}

}

 

 

JDK를 사용해 컴파일하기
텍스트 파일을 실행 가능한 프로그램으로 만들기 위해 JDK 컴파일러를 사용한다. 자바로 컴파일 된 코드를 바이트코드(Bytecode)라 부르며, .class 확장자가 붙는다. 
자바 컴파일러 약자인 javac을 사용하게 될 것이다.  

javac이 자바 컴파일러 인 줄 처음 알았다 예제충의 반성
txt파일 확장자를 변경하지 않으면 Intro.java.txt로 저장되기 때문에 확실히 변경해야함.
삽질;;

 

이미지 4 javac 컴파일

.class 파일 실행
Intro.java가 있는 디렉토리에서 Intro.class 파일을 볼 수 있다.

java intro를 입력해 실행할 수 있다. 

 

이미지 5 .class 실행

jar 명령어
javac - jdk의 중요한 명령어라고 한다. 
하지만 \bin 디렉토리에는 필요한 다른 도구들이 들어있고 javac다음으로 가장 유명한 것은 jar 도구일지도 모르겠다. 
.jar 파일은 패키지 된 자바 클래스 세트다. 일단 컴파일러가 .class 파일을 생성한 다음에는, 개발자가 이것들을 예측 가능한 방식으로 압축하고 체계화하는 하나의 .jar 파일에 넣을 수 있다. Intro.class를 jar 파일로 변환해보고 실행해보자. 

jar = java archive = 여러개의 클래스 파일을 하나로 묶어서 실행

.jar 생성 명령어
C:\Program Files\Java\jdk1.8.0_191\bin\jar.exe" cf intro.jar Intro.class 
.jar 실행명령어
java -cp intro.jar Intro

예제에는 생성 명령어가 cf가 아니라 --create --file 이어서 계속 안되었음;; 삽질2

-cp 스위치는 자바에게 해당 jar을 클래스 경로에 추가하라고 지시한다. 이렇게 작은 프로그램에 대해서는 .jar 파일이 과한것이지만, 프로그램의 크기가 늘어나고 써드파티 패키지에 의존해감에 따라 필수적이 된다. 

 

이미지 6 .jar 생성 및 실행

 

IDE와 JDK

이미지 7 Oracle java 다운로드

다운로드 페이지를 보면 NetBeans IDE가 포함된 다운로드 옵션이 있다. 
통합 개발 환경 (Interated Development Environment,IDE)은 애플리케이션 개발을 위한 종합적인 도구세트를 제공해주는 소프트웨어다. 코드 자동 완성과 포매팅 같은 고유의 추가기능과 함께, 파일 탐색기나 텍스트 편집기 같은 도구세트를 가지고 있는 시각적 운영체제라고 생각하면 된다. *IDE가 하고있는 핵심 사항 가운데 하나는 개발자 대신 컴파일 작업을 관리하는 것이다. 즉, IDE가 백그라운드에서 자동으로 컴파일 과정을 실행하므로, 개발자가 이 작업을 계속해서 할 필요가 없다. IDE는 작업 과정에 따라 실시간 피드백을 제공해, 즉각적으로 코딩 오류를 잡아낸다. 

 

 

 

2. IDE 선택 ( IntelliJ )

사실 Java를 처음 공부할 때 Eclipse를 설치해서 사용했었다. 간단한 예제들을 만들어보면서 사용하다가 안드로이드 공부로 넘어가면서 쓸 일이 없었고 후에 조악한 멀티플레이 게임을 혼자 만들어보면서 java로 서버를 구현할 때 사용해보고 그 뒤로는 사용해 보지 않았다.

현재 IntelliJ를 사용해야 하는 상황이 되어서 선택한 것이다.

Eclipse와 IntelliJ를 비교하는 것은 일단 먼저 사용해 보고 중간중간 느낀점들을 올려보도록 하겠다.

[설치법]
https://www.jetbrains.com/idea/download/#section=windows

Ultimate / Community가 있다.
유료 / 무료로 나뉘어지고 당연하게도 유료인 Ultimate가 더 많은 기능을 지원한다.
하지만 무료인 Community에 For JVM and Android development라고 나와 있기 때문에 Java 개발에 있어서는 문제없다고 판단하여 Community로 설치를 진행하였다.

역시나 닥치고 NEXT 

 

 


3. 프로젝트 생성

Hello world 출력해보고 마무리 하도록 하겠다.
간단하기 때문에 캡처 이미지로 진행하도록 하겠다.

 이미지 8 new project

File -> New -> Project...

 

이미지 9  java project

java와 projet sdk version 확인 후 next

 

 이미지 10 프로젝트 이름 입력

 

 이미지 11 java class 생성

 

이미지 12 클래스명 입력

 

 이미지13 hello world 출력

 

이미지 14 출력확인