Java Category/Java

프로그래밍 언어와 자바(with JVM)

ReBugs 2022. 12. 22.

컴퓨터와의 소통

컴퓨터는 0과 1로 이루어진 이진 코드만 이해할 수 있다.

사람은 이진 코드(기계어)를 이해하기 어렵다

 

그래서 컴퓨터와 사람이 의사 소통할 수 있는 방법이 필요하다

그 방법은 프로그래밍 언어이다.

프로그래밍 언어로 작성한 파일을 소스 파일이라고 하고 소스 파일은 인간이 이해할 수 있다.

소스 파일은 컴퓨터가 바로 이해할 수 없기 때문에 컴파일이라는 과정을 통해서 0과 1로 이루어진 기계어 파일로 번역을 해야 컴퓨터가 이해할 수 있다.

 

 


프로그래밍 언어와 용도

프로그래밍 언어에는 C, C++, C#, JAVA, Python 등이 있다.

각 프로그래밍 언어는 컴퓨터에게 명령을 내리기 위함이라는 목적은 똑같지만 용도는 조금씩 다르다

자바(JAVA) : 임베디드, 웹, 안드로이드 소프트웨어 개발 분야

C / C++ : 하드웨어 장치 제어 및 임베디드 소프트웨어 분야

파이썬(Python) : 빅데이터 분석 및 머신러닝 소프트웨어 분야

기타 여러 가지 프로그래밍 언어는 각자의 특성을 살린 용도가 있다.

 


자바의 특징

모든 운영체제에서 실행 가능한 데스크톱 애플리케이션뿐만 아니라, 안드로이드 스마트폰에서 실행하는 애플리케이션, 웹사이트를 개발하는 핵심언어로 사용됨.

  • 이식성이 좋음
  • 간단함
  • 보안에 좋음
  • 객체지향언어
  • 아키텍처가 중립적

이식성

자바의 가장 큰 장점은 이식성이 좋다는 것이다.

이식성이란 특정한 운영체제에서도 우리가 만든 프로그램이 정상적으로 작동할 수 있는 특성을 말한다.

이식성이 높으면 각각의 운영체제 특성을 고려하지 않기에 최적의 성능을 얻어낼 수 없지만, 그것을 극복한 것이 자바이다.

 

간단함

C나 C++ 개발자라면 메모리 관리, 연산자 오버로딩, 다중상속 때문에 머리가 많이 아팠을 것이다.

메모리 할당을 했지만 메모리를 회수하지 않는다면 프로그램이 종료해도 계속 메모리를 낭비할 것이고 이러한 문제를 자바는 가비지 콜렉터(garbage collector)로 해결한다.

자바는 C++을 기반으로 만들어졌지만, 혼란을 주는 연산자 오버로딩, 다중 상속등의 문제를 신경 쓰지 않아도 된다.

 

객체지향(OOP)

절차 지향 프로그래밍의 문제점을 보완한 것이 객체 지향 프로그래밍이다.

클래스와 객체를 만들어서 모든 데이터와 함수를 하나의 물체처럼 취급해서 프로그래밍 하는 방법이다.

객체 지향 프로그래밍의 특징은 캡슐화, 다형성, 상속 등등이 있다.

 

보안성

자바는 네트워크 분산 처리 환경에서 사용하기 위해 디자인된 언어이다.

자바는 바이러스가 침투하지 못하는 구조를 가지고 메모리에서 데이터 접근을 제한할 수 있다.

접근을 허용하지 않으면, 프로그램의 데이터 구조 또는 데이터에 대한 접근이 불가하다.

 

아키텍처 중립성

자바는 자바 코드 소스를 컴파일하여 바이트 코드를 만들어내며 이 바이트 코드는 다양한 플랫폼에 설치된 자바 인터프리터에 의해 해석되기 때문에 어떠한 플랫폼에서도 실행 가능하다. 따라서 새로운 기계라도 자바 인터프리터만 설치되어 있으면 바이트 코드를 해석할 수 있다.

 


JVM(Java Virtual Machine)

위의 자바의 특징에서 이식성을 말했는데, 자바가 이식성이 좋은 이유는 바로 JVM때문이다.

자바로 프로그래머가 작성한 소스코드 파일의 확장자는 java이다.

이것을 컴파일하면 .java 파일이 바이트코드(확장자 : class)로 변환된다.

여기서 바이트 코드는 컴퓨터가 이해할 수 있는 기계어가 아니라 JVM이 이해할 수 있는 코드이다.

JVM은 바이트 코드를 기계어로 변환해 준다.

바이트 코드와 JVM
바이트 코드는 운영체제와 상관없이 동일한 내용인데, JVM은 운영체제에서 이해하는 기계어로 번역해야 하므로 JVM은  운영체제별로 다르게 설치된다.

위의 그림에 나온 윈도우와 리눅스 외에 운영체제에서도 작동하게 해주는 JVM이 있으며, JVM은 각각의 운영체제에서 실행할 수 있는 기계어로 번역 후 실행한다.

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

[JAVA] 연산자  (2) 2022.12.25
[JAVA] 시스템 입출력  (0) 2022.12.24
[JAVA] 타입 변환(형 변환)  (0) 2022.12.23
[JAVA] 기본 타입  (0) 2022.12.22
JAVA+Eclipse 설치 및 환경변수 설정 총정리 (+Hello, World!출력하기)  (1) 2022.12.20

댓글