목적
스프링을 공부를 시작하기 전 여러 자료들을 보며 자바의 기본 다지기가 필요한 것 같다는 자바의 기초와 스프링을 함께 봐야할 것 같다는 생각이 들게 되었다.
본 카테고리의 포스팅은 (집에서 뒹굴던)"자바의 정석 2nd"를 바탕으로 작성될 예정입니다.
또한, 잡다한지식(탄생배경, 언어 공통적인 변수(int, double)의 특징, 개요 등은 다루지 않고 "자바" 다운 프로그래밍을 하기 위한 지식을 쌓기위한 포스팅이 될 예정입니다. 또한, 기본적인 프로그래밍 내용이 아닌 자바에서 특히 주의할 점, 자칫 간과하기 쉬운 점들을 집중적으로 작성할 예정입니다.
1. 자바의 특징
- 운영체제 독립적이다.
JVM 위에서 작동하기 때문에 특정 운영체제에 독립적이다. JVM은 자바 애플리케이션과 운영체제를 연결하는 인터페이스로서 작동한다. 하지만 JVM은 각 운영체제마다 다른 버전이 있어 동일 애플리케이션에 대해서는 운영체제에 따라서 동일하게 동작할 수 있도록 동작한다.
- 객체지향 언어이다.
대표적인 객체지향 프로그래밍언어(ObjectOrientedProgramming)로서 상속, 캡슐화, 다형성 등이 잘 적용된 언어이다.
- 자동 메모리 관리(Garbage Collection)
자동으로 메모리를 관리해 주기 때문에 프로그래머는 메모리를 체크하고 반환하는 일을 하지 않아도 된다. 이때문에 프로그래머는 보다 프로그래밍에 집중 할 수 있게 된다.
- 네트워크와 분산처리를 지원한다.
인터넷과 대규모 분산환경을 염두해 둔 까닭에 풍부하고 다양한 네트워크 프로그래밍 라이브러리를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
- 멀티쓰레드를 지원한다.
일반적으로 운영체제에 따라 멀티쓰레드 구현방법이 다르다. 하지만 자바에서는 운영체제와 상관없이 멀티쓰레드 프로그래밍이 가능하며 관련 라이브러리가 제공되므로 구현이 쉽다. 그리고 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.
- 동적 로딩을 지원한다.
자바로 된 프로그램은 여러개의 클래스를 가지고 있는데 동적로딩을 지원하기 때문에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다. 또한, 일부 클래스가 변경되더라도 전체가 아닌 일부만 컴파일하여 비교적 적은 작업으로 처리 할 수 있는 유연성을 갖는다.
※컴파일러 인터프리터
우선 컴파일러와 인터프리터의 차이를 알아보자
-컴파일러
* 사용언어 : C, C++
* 작동원리 : 코드 전체를 한번에 기계어로 번역하여 실행한다.
* 장단점 : 코드를 한번에 컴파일 하기 때문에 초기 실행시간이 길지만 한번 컴파일 한 코드에 대해서는 실행시간이 짧다.
-인터프리터
* 사용언어 : Python, JavaScript, PHP
* 작동원리 : 코드를 한줄씩 번역하며 실행한다.
* 장단점 : 코드를 실행할 때마다 한줄씩 번역해야하기 때문에 초기실행시간은 상대적으로 짧을 수 있으나 컴파일러에 비해 평균 실행시간이 길어질 것이다.
- 자바
* 컴파일러와 인터프리터를 동시에 사용
1. 컴파일러는 .java 파일을 .class 파일로 변환시킨다.
2. 인터프리터는 .class 파일을 각 OS에 맞는 기계어로 변환 시킨다.
위와 같이 두가지를 섞어서 쓰는 것으로 OS에 구애받지 않는 실행 환경이라는 목적을 달성 할 수 있다.
이런 역할을 하는 것이 JVM에서 동작하는 인터프리터이다.
단점이라고 한다면 두가지 과정을 거치며 속도가 느려진다는 것인데 이것은 인터프리터와 정적컴파일을 혼합한 방식인 JIT(Just In Time)을 통해 극복한다고 한다.
'개발 > JAVA' 카테고리의 다른 글
[Java]객체지향 언어-4(상속/ 포함 등 클래스간의 관계) (0) | 2021.05.16 |
---|---|
[JAVA개념]객체지향언어-3 (0) | 2021.05.11 |
[JAVA개념]객체지향언어-2 (0) | 2021.05.10 |
[JAVA개념]객체지향언어-1 (0) | 2021.05.09 |
[JAVA 개념] 변수, 배열 (0) | 2021.05.08 |
댓글