본문 바로가기
Programming/Java

[Java] 0. 자바 개요

by Rayched 2022. 8. 19.

[자바의 정의]

1995년 미국의 '썬 마이크로 시스템즈'에서 개발한 객체 지향 프로그래밍 언어

(썬 마이크로 시스템즈는 2010년 오라클 사에 인수되었고

현재 자바는 오라클 사에 의해 배포되고 있다.)


자바의 정의를 알았으니, 이제 자바의 특징에 대해 알아보자.


[자바의 특징]

① 쉬운 난이도의 언어이다.

② 플랫폼에 독립적이다.

③ 자동으로 메모리를 정리해주는 기능이 존재한다.

④ 객체지향 언어이다.


 

① 쉬운 난이도의 언어이다.

자바는 기본적으로 'C'와 'C++'의 문법을 차용한 언어지만, 그들이 가진 어려운 문법인

포인터와 다중 상속을 제거함으로써 문법적인 난이도를 낮춘 프로그래밍 언어이다.

 

② 플랫폼에 독립적이다.

(1). C언어는 운영체제에 독립적이지 않다.

Linux 운영체제에서 C로 개발한 프로그램은 타 운영체제인 Windows에서 실행했을 때 실행되지 않는다.

물론 Windows에서 C로 개발한 프로그램을 Linux에서 실행하려고 해도 실행되지 않는다.

이에 대해 설명하기 위해서는 '컴파일'이 무엇인지에 대해서 알고 갈 필요가 있다.

프로그래머가 'C'와 같은 고급 언어로 작성한 프로그램을 그대로 컴퓨터에 보내면 컴퓨터는 이를 이해하지 못한다.

그렇기에 고급 언어로 작성한 프로그램을 해당 운영체제가 이해할 수 있는 기계어로 번역하는 과정을

'컴파일 Compile'이라 하고, 이것을 수행하는 프로그램을 '컴파일러 Compiler'라고 한다.

컴파일러는 Linux용 C 프로그램 소스코드는 Linux 기계어로, Windows용 C 프로그램 소스코드는 Windows 기계어로

변환해준다. 따라서 C언어는 운영체제에 독립적이지 못하지만, 자바는 플랫폼에 독립적이다.

 

(2). 자바는 플랫폼에 독립적인 이유

자바의 경우는 Java Virtual Machine, JVM이 운영체제와 프로그램 사이에서 중재하는 역할을 한다.

Linux 운영체제에서 Java로 개발한 프로그램을 Windows에서 실행시키면

JVM이 프로그램이 동작되는 운영체제의 종류를 파악하고, 해당 운영체제에 맞는 기계어로 다시 번역하기 때문에

운영체제의 종류에 구애를 받지 않고 프로그램을 실행하는 것이 가능하다.

 

(3). Java Virtual Machine, JVM, 자바 가상 머신

자바 가상 머신(Java Virtual Machine), 통칭 JVM의 일반적인 정의는 다음과 같다.

'자바 프로그램의 실행 환경을 만들어주는 소프트웨어'

이를 좀 더 기술적으로 풀어보자면 아래와 같은 의미가 된다.

'코드를 실행하고, 해당 코드에 대해 런타임(Runtime) 환경을 제공하는 소프트웨어 프로그램에 대한 사양'

 

자바 소스코드를 자바 컴파일러를 통해 '*.class'라는 바이트 코드로 변환하면, 해당 코드가 JVM 환경에서 실행된다.

자바 가상 머신은 자바 실행 환경 (Java Runtime Environment, JRE)에 포함되어 있으며

현재 사용하는 컴퓨터의 운영체제에 맞는 JRE가 설치됐다면 자바 가상 머신도 설치가 된 것이다.

 

(4). C/C++ 컴파일, Java 컴파일

  • C/C++

<그림 1> C 소스코드 컴파일 과정

C언어로 작성한 소스코드가 하나 있다고 가정을 해보자.

해당 소스코드를 Windows 컴파일러를 통해서 컴파일을 진행하면 실행 파일이 하나 생성된다.

해당 파일은 Windows에서만 실행할 수 있으며, 타 운영체제에서 해당 파일을 가져와서 실행하려고 해도

실행이 되지 않는다. 물론 반대의 경우도 마찬가지다.

즉, C/C++로 작성한 소스코드를 컴파일을 진행한 운영체제와, 파일을 실행하려는 운영체제가 다르면

프로그램이 동작하지 않는다.

따라서 Windows에서 만든 실행 파일을 Linux 같은 타 운영체제에서 실행하려면

해당 운영체제에서 컴파일을 해서 실행 파일을 새로 만들어야 한다.

  • Java

<그림 2> Java 소스 코드 컴파일 과정

앞에서 말했던 것처럼 Java로 작성한 소스코드를 컴파일하면 '.class' 파일이 생성된다.

'.class'같은 바이트 코드는 자바 가상 머신이 해당 운영체제에 맞는 실행 파일로 변환을 해준다.

(Windows면 windows 가상 머신으로, Linux면 Linux 가상 머신으로 컴파일 진행됨)

C/C++과 달리, 자바는 가상 머신을 사용하므로 각 운영체제에 맞게끔 컴파일을 따로 해줄 필요가 없는 것이다.

즉, 자바는 운영체제의 종류에 영향을 받지 않는다는 것이다.

하지만  <그림 2>를 보았을 때 자바 가상 머신은 사용하는 운영체제의 종류를 따라가는 것을 확인할 수 있을 것이다.

자바 소스코드를 컴파일하면 바이트 코드로 변환되지만 이를 실행하는 자바 가상 머신은 각 운영체제에 맞는 형태이기 때문에

서로 다른 운영체제의 JVM은 서로 다르고, 자바로 작성한 프로그램을 실행하려면 자바 가상 머신, JVM이

반드시 설치되어 있어야한다.

 

③ 자동으로 메모리를 정리해주는 기능이 존재한다.

우리가 컴퓨터로 프로그래밍을 할 때, 메모리에 다양한 데이터 값을 입력하고 삭제하는 작업을 하는 과정에서

메모리의 용량이 계속해서 차게 된다.

자바는 프로그램 실행 중에 사용하지 않는 메모리를 자동 해제하는 '자동 메모리 정리 기능, Garbage Collection'이란

기능이 존재하므로, 자바를 활용해서 개발을 할 때 메모리 관리 부분을 염두에 두지 않고 프로그래밍이 가능하다.

 

④ 객체지향 언어이다.

객체지향 언어에 대한 상세한 설명을 넣으면 내용이 좀 길어지게 될 것 같아서 개별적으로 분할해서 작성했다.

https://rclogstorage.tistory.com/m/14

 

자바 0-(1). 객체 지향 프로그래밍

앞에서 자바의 정의와 특징들을 설명할 때, 자바의 특징인 '객체지향 언어'라는 부분에 대해 설명하지 않고 넘어갔었다. 이번에는 객체 지향 언어, 객체 지향 프로그래밍에 대해 정리해보겠다.

rclogstorage.tistory.com

 

.

'Programming > Java' 카테고리의 다른 글

[Java] 4. 조건문  (1) 2022.10.05
[Java] 3. 연산자  (0) 2022.09.23
[Java] 2. 데이터 타입과 형변환  (1) 2022.09.21
[Java] 1. 변수와 상수  (0) 2022.09.13
[Java] 0 - (1). 객체 지향 프로그래밍이란 무엇인가  (2) 2022.09.13