1. Java
가. Java 등장 배경
1991년, 선마이크로시스템스의 제임스 고슬링을 중심으로 '그린 프로젝트'라는 이름으로 가전제품에 사용할 SW를 개발하기 시작했다. 가전제품은 매우 다양한 플랫폼을 가지고 있기 때문에 플랫폼에 독립적인 언어가 필요했고, 또 가전제품에 들어가는 제어 장치는 매우 적은 양의 메모리를 사용해야 하므로 내장형 시스템의 메모리 요구사항을 충족해야 했다. 선마이크로시스템스는 이 새로운 언어와 실행체계를 오크(oak)라 이름지었고, 이 오크를 인터넷 환경에 적합하도록 발전시켰다.
1995년, SunWorld 95에서 자바(Java)라는 이름으로 새로운 언어를 발표하였고, 오라클 사에서 2009년 선마이크로시스템스를 인수하여 현재는 오라클에서 자바를 제공하고 있다.
나. Java 컴파일과 실행
① 소스 프로그램 편집 및 개발(.java)
② 자바 컴파일러가 소스 파일을 컴파일하여 바이트 코드로 된 클래스 파일 생성(.class)
- 바이트 코드, JVM에서 실행되는 기계어. 어떤 CPU와도 관계없는 바이너리 코드
③ 자바 가상 기계(JVM)가 인터프리터 방식으로 실행
- 하나의 실행 파일로 묶는 링크 과정 없음
- 클래스 파일을 메모리에 로딩하여 실행
- 실행 도중 다른 클래스 파일이나 JDK 클래스 파일이 필요하면, JVM은 그 때 필요한 클래스 파일을 로딩(동적 로딩)하여 실행
- 당장 실행할 클래스 파일만 로딩하여 실행할 수 있으므로, 적은 량의 메모리를 가진 CPU에서 큰 자바 응용 프로그램 실행 가능
2. Java의 특징
- 플랫폼 독립성
- WORA, Write Once Run Anyshere
- 하드웨어, 운영체제 등 플랫폼에 종속되지 않는 독립적인 바이트 코드로 컴파일됨
- 자바 가상 머신(JVM)만 있으면 실행가능
- 이식성이 높음
- 자바 실행환경(JRE)이 설치되어 있는 모든 운영체제에서 실행 가능
- 객체 지향성
- OOP, 프로그램을 개발하는 기법으로 부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법
- 완전한 객체지향 언어
- 객체를 만들기 위해 설계도인 class를 작성하고, 객체와 객체를 연결해 목적에 맞는 프로그램을 만들어냄
- 캡슐화, 상속, 다형성 지원
- 멀티스레드 지원
- 하나의 프로그램이 다수의 작업을 처리해야 하는 경우와 대용량 작업을 빨리 처리하기 위한 서브 작업 병렬 처리를위한 멀티스레드 환경 지원
- 스레드 생성 및 제어와 관련한 라이브러리 API를 제공하고 있기 때문에, 실행되는 운영체제에 관계없이 멀티스레드 구현 가능
- 가비지 컬렉션
- 메모리를 할당받을 수는 있지만, 메모리를 반환하는 기능은 없음(개발자로 하여금 프로그래밍 부담을 줄여줌)
- 자바 가상 기계의 가비지 컬렉션(Garbage Collection)이 프로그램 내에서 사용되지 않는 메모리(Garbage)를 자동으로 회수
- 동적 로딩 지원
- 애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 객체가 필요한 시점에 클래스를 동적로딩하여 객체를 생성
- 적은 량의 메모리를 가진 CPU에서 큰 자바 응용 프로그램 실행 가능
- 개발 완료 후 유지보수 시, 해당 클래스만 수정하면 되므로 전체 애플리케이션을 다시 컴파일할 필요가 없음
- 다양한 애플리케이션 개발 가능
- 콘솔 프로그램부터 클라이언트용 윈도우 애플리케이션, 서버용 웹 애플리케이션, 모바일용 안드로이드 앱 등 거의 모든 곳에서 실행되는 프로그램 개발 가능
- 분산 프로그래밍 지원
- 네트워크를 이용한 프로그래밍을 지원하고, 원격 접속을 위한 다양한 기술셋을 가지고 있음
- 실시간 응용 시스템에 부적합
- 실행 도중 예측할 수 없는 시점에 GC가 실행되므로 프로그램 실행이 일시적으로 중단됨
- 일정 시간 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 부적합
- 안전
- 타입 체크가 엄격하고, 메모리의 물리적 주소를 사용하는 포인터의 개념이 없음
- 잘못된 프로그램으로 인하여 컴퓨터 시스템이 중단되는 일은 없음
- 작성이 쉬움
- 포인터의 개념이 없고, 개발을 도와주는 다양한 라이브러리가 있어 프로그램 작성이 빠르고 쉬움
- JIT 컴파일러 사용
- 자바 가상 기계가 인터프리터 방식으로 바이트 코드를 실행하므로 일반적으로 실행 속도가 느린 편
- 최근에는 실행도중 자바 프로그램을 해당 CPU 기계어로 컴파일하고 CPU가 바로 기계어를 실행하는 JIT(Just In Time)컴파일링 기법을 이용하여 속도를 개선
3. Java의 장단점
- 장점
- 플랫폼 독립적
- 객체지향언어
- 멀티스레드
- 다양한 오픈소스 라이브러리 > 개발 시간 및 비용 단축 가능
- 단점
- 실행 속도
- 자바 가상 머신에 의해 기계어로 번역(바이트 코드)되고 인터프리터 방식으로 실행됨
- 컴파일 후 기계어로 변환되어 실행되는 C/C++에 비하면 속도가 현저히 느림
- JIT 컴파일링 방식을 사용하지만, 여전히 느림
- 예외 처리
- 프로그램 실행 중 발생할 수 있는 예외들을 개발자가 직접 처리해야 함
- 하드웨어를 정밀하게 조정해야 하는 개발에는 부적합 < JVM을 이용하기 때문에 하드웨어 연결 제어 불가능
- 실행 속도
참고
황기대·김효수, 명품 Java Programing(개정 3판) ((주)생능출판사, 2017)
'Computer Science > Java' 카테고리의 다른 글
[Java] 객체지향프로그래밍(OOP, Object Oriented Programming) (0) | 2021.12.13 |
---|---|
[Java] 자료형(기본형/참조형/클래스) (0) | 2021.12.09 |
댓글