자바언어의 특징에 대해서 알기 전에 , 그 전에 이미나온 언어 c++ 의 특징에 대해 알 필요가 있다.
A) 패트릭 노튼이 지적한 C++의 단점
- 언어의 구문이 복잡하여 단일한 문제에 대해서 너무 다양한 코드 작성이 가능하고
- 메모리 관리를 프로그래머에게 맡기고 있어서 실수의 위험성이 크며
- 크로스 플랫폼(이기종 환경에서의 동작)을 지원하는데 제약사항이 있다.
그럼에도 불구하고 초기에 C++을 생각했던 이유는 제한된 환경에서 동작하는 프로그램을 만들어야 하는 것 때문이었는데, 그것을 포기하고 새로운 언어를 만들기로 해서 탄생한 언어가 자바이다.
자바 언어는 C++ 언어를 기반으로 만들어졌으며 앞서 지적된 사항들을 제거하는 것을 기본으로 한다. 그래서 C++과 비교했을 때 자바에는 다음과 같은 특징들이 사라졌다.
- 객체 제거하는 delete 키워드 제거
- 참조와 포인터 중에서 포인터 제거
- 데이터 구조를 정의하는 struct와 class 중에서 struct 키워드 제거
- 함수를 클래스 밖에서 정의할 수 있는 구문 제거
--> 정리하자면, 쓰잘데기 없는 언어의 구문기능을 제거했다고 생각하면 쉽다.
이렇듯 자바는 C++이 가지고 있는 기능 중에서 문제가 될 만한 구문들을 제거하였다. 그래서 자바의 특정에서 제일 먼저 꼽는 특징은 “간결성”이다.
모든 기능을 제거만 한 것은 아니다. C++에는 없던 추가된 내용도 있고 개선된 내용도 있다.
- 콜렉션을 언어에 포함하였다.
- 글로벌한 문자를 처리할 수 있는 인코딩이 포함되었다.
- 완전한 객체지향 언어가 되도록 하였다.
--컴파일러와 인터프리터
자바로 언어로 작성한 코드를 실행하려면 그것을 기계어로 번역해주어야만 한다. 그 때 사용하는 번역기를 컴파일러라고 하였다. 그런데 컴파일러 말고 인터프리터(Interpreter)라는 번역기도 존재한다.
인터프리터는 번역기 역할도 하지만 번역이 주목적이 아니라 코드를 바로 실행시켜주는 것을 목적으로 한다.
이 번역기는 소스코드를 바로 실행해주기 위해서 소스코드 전체를 번역하지 않고 당장 실행에 필요한 블록부터 번역해서 실행하도록 도와주며 추가적으로 더 필요하면 그때그때마다 번역을 하면서 실행을 시켜주는 것을 도와준다.
인터프리터는 필요한 것만 번역할 뿐 전체코드를 번역하지 않기 때문에 번역된 결과물을 남기지 않는다. 그래서 인터프리터의 또 다른 이름을 JIT(Just In Time) Compiler라고 부르기도 한다.
컴파일러와 인터프리터의 특징은 마치 인터넷을 통해서 영화를 보는 두 개의 방법과 비교될 수 있다. 인터넷 영화를 볼 때는 전체 파일을 다운로드 받아서 보는 방법(= 컴파일러를 사용하는 방법)과 필요한 부분만 그때그때 받아서 바로 보는 스트리밍 방법(=인터프리터)으로 나누어 볼 수 있다.
영화 전체 파일을 받아서 본 상태에서 다음에 영화를 또 보고 싶다면 이전에 다운로드했던 파일을 바로 보면 된다. 반면에 스트리밍으로 영화를 본 상태에서 다음에 영화를 또 보고 싶다면 이전에 다운로드 받았던 것이 남아있지 않기 때문에 영상을 다시 내려 받아서 봐야만 한다.
이와 유사하게 소스코드를 컴파일러로 번역하고 실행한 상태에서 다음에 또 실행하고 싶다면 이전에 번역했던 결과물을 바로 실행하면 된다. 반면에 인터프리터로 번역하고 실행한 상태라면 매번 실행할 때마다 다시 번역해서 실행해야만 한다.
프로그램을 배포할 때 수행성능을 생각한다면 컴파일한 결과물을 배포하는 것이 바람직하다. 하지만 인터프리터를 사용함으로써 얻는 커다란 장점을 무시할 수는 없다.
-->팁: 머신이란 코드를 실행해주는 실행자를 말하는데, CPU를 의미하는 말이다
자바 컴파일러는 그림의 4단계인 중간코드 까지만 번역한다. 그래야만 특정 CPU에 종속되지 않기 때문이다. 그 중간까지만 번역된 결과물이 클래스 파일(Program.class)이다.
자, 자바는 고급언어다!!
'웹 풀스택 스터디(뉴렉처-학원)--> 이거 꼭 보세요' 카테고리의 다른 글
8. 자바 (조건문) (0) | 2021.08.11 |
---|---|
7. 자바 기본 문법 (0) | 2021.08.06 |
5. 코드분리와 인터페이스 (0) | 2021.08.05 |
4.클래스블록 (0) | 2021.08.05 |
3. 자바 컴파일러를 이용해 컴퓨터 프로그램 만들기 (0) | 2021.07.24 |