[Java] Java 개요 및 장단점

JD_S·2022년 11월 12일
0

Java

목록 보기
1/21

자바(Java)란?

자바는 썬 마이크로시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 그린 프로젝트라는 이름으로 시작해 1995년에 발표(JDK베타 발표, JDK 1.0은 1996년 1월 23일 발표) 했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발되었지만 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어 중 하나이며, 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발에도 널리 사용되고 있다.

자바의 가장 중요한 특징은 운영체제(플랫폼)에 독립적이라는 것이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트 코드를 실행하기 위해 JVM(Java Virtual Machine)이 필요하다. JVM은 자바 바이트 코드를 어느 플랫폼에서나 동일한 형태로 실행 시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영체제의 종류에 상관없이 JVM을 설치할 수 있는 곳 어디에서나 실행할 수 있고 이런 부분이 웹 애플리케이션의 특성과 맞아 떨어져 큰 인기를 끌게 된 것이다.

자바의 역사

자바는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링이 만들었다. 자바는 원래 제임스 고슬링이 사무실 밖에 있던 오크(그 오크가 아니다. ㅎㅎ)나무를 따다 오크(Oak)라고, 혹은 그린(Green) 이라고도 불렀으나, 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다.(인도네시아의 커피 종류인 Java Coffee에서 Java로 바뀌었다는 썰도 있다./ 이 부분은 논쟁의 여지가 있다고 한다.)

제임스 고슬링과 아서 밴 호프와 같은 썬의 엔지니어들이 원래 목표는 가전제품에 탑재될 소프트웨어를 만드는 것이었다. C++로는 한계가 있음을 깨닫고 C++의 장점을 도입하고 단점을 보완하기 위해 만들었다.

자바의 철학

  • 객체 지향 방법론을 사용해야 한다.
  • 같은 프로그램이 여러 운영 체제에서 실행될 수 있어야 한다.
  • 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
  • 원격 코드를 안전하게 실행할 수 있어야 한다.
  • 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

자바의 장점

1. 운영체제에 독립적이다.

JVM이 있어 가능하다. 자바 응용 프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용 프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. 자바로 작성된 프로그램은 운영체제에 독립적이지만, JVM은 운영체제에 종속적이어서 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있다.

2. 객체지향 언어이다.

객체지향개념의 특징인 상속, 캡슐화, 다형성, 추상화 등이 잘 적용되어 있다.

3. 비교적 배우기 쉽다.

자바의 연산자와 기본구분은 C++에서, 객체지향관련 구문은 스몰톡이라는 객체지향 언어에서 가져왔다. 이 들 언어의 장점은 취하되 복잡하고 불필요한 요소들은 과감히 제거하여 단순화했다. 그래서 쉽게 배울 수 있으며, 간결하고 이해하기 쉬운 코드를 작성할 수 있다.

4. 자동 메모리 관리(Garbage Collection)

가비지 컬렉터가 자동적으로 메모리를 관리해주기 때문에 메모리에 대한 영역은 신경안써도 된다. 자동으로 메모리를 관리한다는 것이 어떻게 보면 비효율적인 부분도 있을수 있겠지만 프로그래머가 프로그래밍에 집중할 수 있도록 도와준다.

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

풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.

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

일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현 방법도 처리 방식도 다르다. 하지만 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능하며, Java API가 제공되므로 구현이 쉽다.

7. 동적 로딩(Dynamic Loading)을 지원한다.

일반적으로 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 이외에도 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일 하지 않아도 된다.

자바의 단점

1. 실행 속도가 다른 언어보다 느리다.

다이렉트로 컴파일 되는 것이 아니라 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C/C++보다는 속도가 느리다.

자바 실행 코드 생성 및 마이크로프로세서와의 관계

자바가 여러 개의 마이크로프로세서(CPU)에서 같은 코드가 실행되기 위해서는 C/C++의 프로그램의 실행구조와는 다른 방식이 필요하다. C/C++가 특정 CPU의 기계어 코드를 직접 생성하면, 이 기계어 코드가 메모리에 적재되어 바로 실행된다. 따라서 C/C++는 CPU가 달라지면 컴파일러가 달라져야 한다.(1. CPU와 컴파일러는 무슨 관계일까?)
임베디드 프로그램의 경우, GCC는 GCC소스를 사용해서 특정 CPU를 지정하고, 컴파일러(x86 운영체제에서 실행되는)로 크로스 컴파일러를 만들 수 있다. 그러나 자바는 같은 코드를 사용하여 다른 CPU에서 실행되도록 하기 위해 직접 CPU의 기계어 코드를 생성해서는 안된다. 그 대신 바이트코드라는 것을 생성한다. 이것을 JVM이 해석을 하여 실행한다. JVM이 인터프리터가 되어 코드 해석 방식의 실행을 함으로써, 같은 바이트코드를 가지고 여러 가지의 CPU에서 실행이 가능해진다. JVM은 CPU와 직접적인 관계가 있어서 CPU의 기계어 코드로 이루어진다.

마이크로프로세서 : 데이터 처리 로직과 제어가 단일 집적회로 또는 소수의 집적 회로에 포함된 컴퓨터 프로세서로 컴퓨터의 중앙 처리 장치(CPU)의 기능을 수행하는 데 필요한 산술, 논리 및 제어 회로가 포함되어 있다.

임베디드 시스템 : 기계나 기타 제어가 필요한 시스템에 대해, 제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 내에 존재하는 전자 시스템이다. 즉, 임베디드 시스템은 전체 장치의 일부분으로 구성되며 제어가 필요한 시스템을 위한 두뇌 역할을 하는 특정 목적의 컴퓨터 시스템이다.

GCC : GNU Compiler Collection 줄여서 GCC라고 하며 GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러이다.

크로스 컴파일러 : 컴파일러가 실행되는 운영체제가 아닌 다른 운영체제에서 실행 가능한 코드를 생성할 수 있는 컴파일러. 보통 임베디드 시스템 혹은 여러 운영체제에서 실행파일을 생성하는데 사용된다.

JVM구조. 소스코드는 바이트코드로 컴파일 되어 생성되어 코드 검증이 JVM에 의해 해석되어 실행(interpreted) 또는 JIT 컴파일로 직접 기계어 코드로 변환 실행. JRE(Java Runtime Environment)에 API와 JVM이 함께 만들어짐

JIT 컴파일(Just-in-time compilation) : 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법.

인터프리터 : 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 컴파일러와 상반되는 개념.

버전

자바의 버전은 보통 Java SE 또는 JDK/JRE의 버전으로 말한다.
JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK버전이 바뀜에 따라 이 라이브러리가 확대되고 API가 바뀐다. 초기 1.0/1.1버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)로 변경되었다.

Reference

profile
Whatever does not destroy me makes me stronger.

0개의 댓글