본문 바로가기
개발/JAVA

[JAVA 개념] 자바의 이해

by Develaniper 2021. 5. 5.

목적

 스프링을 공부를 시작하기 전 여러 자료들을 보며 자바의 기본 다지기가 필요한 것 같다는 자바의 기초와 스프링을 함께 봐야할 것 같다는 생각이 들게 되었다.

 

 본 카테고리의 포스팅은 (집에서 뒹굴던)"자바의 정석 2nd"를 바탕으로 작성될 예정입니다.

 

 또한, 잡다한지식(탄생배경, 언어 공통적인 변수(int, double)의 특징, 개요 등은 다루지 않고 "자바" 다운 프로그래밍을 하기 위한 지식을 쌓기위한 포스팅이 될 예정입니다. 또한, 기본적인 프로그래밍 내용이 아닌 자바에서 특히 주의할 점, 자칫 간과하기 쉬운 점들을 집중적으로 작성할 예정입니다.

 

 

1. 자바의 특징

- 운영체제 독립적이다.

  JVM 위에서 작동하기 때문에 특정 운영체제에 독립적이다. JVM은 자바 애플리케이션과 운영체제를 연결하는 인터페이스로서 작동한다. 하지만 JVM은 각 운영체제마다 다른 버전이 있어 동일 애플리케이션에 대해서는 운영체제에 따라서 동일하게 동작할 수 있도록 동작한다.

위 사진과 같이 OS와 통신하는 방법만 다를 뿐 JAVA Application과 JVM이 통신하는 법은 같다고 생각하면 될 것 같다.

 

- 객체지향 언어이다.

 대표적인 객체지향 프로그래밍언어(ObjectOrientedProgramming)로서 상속, 캡슐화, 다형성 등이 잘 적용된 언어이다.

- 자동 메모리 관리(Garbage Collection)

 자동으로 메모리를 관리해 주기 때문에 프로그래머는 메모리를 체크하고 반환하는 일을 하지 않아도 된다. 이때문에 프로그래머는 보다 프로그래밍에 집중 할 수 있게 된다.

- 네트워크와 분산처리를 지원한다.

 인터넷과 대규모 분산환경을 염두해 둔 까닭에 풍부하고 다양한 네트워크 프로그래밍 라이브러리를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.

- 멀티쓰레드를 지원한다.

 일반적으로 운영체제에 따라 멀티쓰레드 구현방법이 다르다. 하지만 자바에서는 운영체제와 상관없이 멀티쓰레드 프로그래밍이 가능하며 관련 라이브러리가 제공되므로 구현이 쉽다. 그리고 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.

- 동적 로딩을 지원한다.

 자바로 된 프로그램은 여러개의 클래스를 가지고 있는데 동적로딩을 지원하기 때문에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 또한, 일부 클래스가 변경되더라도 전체가 아닌 일부만 컴파일하여 비교적 적은 작업으로 처리 할 수 있는 유연성을 갖는다.

 

※컴파일러 인터프리터

 우선 컴파일러와 인터프리터의 차이를 알아보자

 

-컴파일러

 * 사용언어 : C, C++

 * 작동원리 : 코드 전체를 한번에 기계어로 번역하여 실행한다.

 * 장단점 : 코드를 한번에 컴파일 하기 때문에 초기 실행시간이 길지만 한번 컴파일 한 코드에 대해서는 실행시간이 짧다.

-인터프리터

 * 사용언어 : Python, JavaScript, PHP

 * 작동원리 : 코드를 한줄씩 번역하며 실행한다.

 * 장단점 : 코드를 실행할 때마다 한줄씩 번역해야하기 때문에 초기실행시간은 상대적으로 짧을 수 있으나 컴파일러에 비해 평균 실행시간이 길어질 것이다.

 

- 자바

 * 컴파일러와 인터프리터를 동시에 사용

1. 컴파일러는 .java 파일을 .class 파일로 변환시킨다. 

2. 인터프리터는 .class 파일을 각 OS에 맞는 기계어로 변환 시킨다.

 

위와 같이 두가지를 섞어서 쓰는 것으로 OS에 구애받지 않는 실행 환경이라는 목적을 달성 할 수 있다.

이런 역할을 하는 것이 JVM에서 동작하는 인터프리터이다.

 

단점이라고 한다면 두가지 과정을 거치며 속도가 느려진다는 것인데 이것은 인터프리터와 정적컴파일을 혼합한 방식인 JIT(Just In Time)을 통해 극복한다고 한다.

댓글