자바는 썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.
자바의 가장 중요한 특징은 운영체제에 독립적이라는 것인데, 이것은 특정 운영체제에 종속받지않고 운영체제 종류에 상관없이 실행이 가능함을 뜻한다. 때문인지 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다.
또한 객체지향개념과 기존의 다른 프로그래밍언어, 특히 C++의 장점을 채택하는 동시에 잘 사용되지 않는 부분은 과감히 제외시킴으로써 비교적 배우기 쉽고 이해하기 쉬운 간결한 표현이 가능하도록 하였으며, 풍부한 클래스 라이프러리(Java API)를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공하기 때문에 자바 프로그래머는 단순히 이 클래스 라이브러리만을 잘 활용해도 강력한 기능의 프로그램을 작성할 수 있는 언어이다.
Java의 역사
Oracle & Sun microsystems
자바의 역사는 1991년 썬 마이크로시스템즈 의 엔지니어들에 의해서 고안된 오크라는 언어에서부터 시작되었다. 제임스 고슬링과 아서 밴 호프와 같은 썬의 엔지니어들의 원래 목표는 가전제품에 탑재될 소프트웨어를 만드는 것이었다. 처음엔 C++을 확장해서 사용하려했지만 C++로는 역부족이였기 때문에 C++의 장점을 도입하고 단점은 보완후 도입한 새로운 언어를 개발하기에 이르렀다. 원래 Oak는 처음에는 가전제품이나 PDA와 같은 소형기기에 사용될 목적이었으나 여러 종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷이 등장하여 운영체제에 독립적인 Oak가 이에 적합하다고 판단, 오크를 인터넷에 적합하도록 개발 방향을 바꾸면서 이름을 자바로 변경하고 1996년 1월에 정식 버전을 발표하였다. 이후 서버 쪽 프로그래밍을 위한 서블릿과 JSP가 많이 사용되고 있으며 2010년 썬이 오라클에 인수되면서 현재 오라클사의 제품이 되었다.
Java의 특징
- 운영체제에 독립적(WORA)
기존의 언어들은 운영체제에 맞게 개발된 프로그램을 다른 운영체제에 적용하기 위해서 많은 노력이 필요하였지만
자바에서는 더 이상 그런 노력을 하지 않게 운영체제 독립적으로 구성되었다. 이것은 일종의 에뮬레이터인 자바가성머신(JVM)을 통해서 가능한 것인데, 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달 받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.
자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공하고 있다.
- 객체지향언어
자바는 객체지향 프로그래밍 언어들 중 하나로 객체지향개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향언어이다.
- 비교적 배우기 쉬움
자바는 연산과 기본구문에 대해선 C++을, 객체지향관련 구문은 스몰톡이라는 객체지향언어를 참조하여 개발되었다. 참조한 언어들의 장점은 취하면서 복잡하고 불필요한 부분들은 과감히 제거하여 단순화함으로서 쉽게 배울 수 있는 언어로 자리매김하였다.
- 자동 메모리 관리(가비지 컬렉션)
자바로 작성된 프로그램이 실행되면 가비지컬렉터가 자동적으로 메모리를 관리해주는데, 이는 프로그래머가 메모리를 따로 관리 하지 않아도 되는 자바의 이점을 보여준다. 자동으로 메모리를 관리한다는 것이 다소 비효율적인 면도 있지만 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와준다.
- 네트워크와 분산처리를 지원
자바에는 풍부하고 다양한 네트워크 프로그래밍 라이브러리(Java API)가 존재하며, 이것은 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원한다.
- 멀티쓰레드를 지원
일반적으로 멀티쓰레드의 지원은 사용되는 운영체제에 따라 구현방법이 상이하며, 처리방식도 다르다. 그러나 자바에서 개발되는 멀티쓰레드 프로그램은 시스템과는 관계없이 구현가능하며, 관련된 라이브러리가 제공되므로 구현이 쉽다. 그리고 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당하게 된다.
- 동적 로딩을 지원
보통 자바로 작성된 애플리케이션은 여러개의 클래스로 구성되어 있다. 자바는 동적 로딩을 지원하기 때문에 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 그 외에도일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성 가능하다.
알아두기:
자바의 대표적인 단점은 속도문제인데 바이트코드를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 Hotspot과 같은 신기술의 도입으로 JVM의 기능이 향상됨으로써 속도문제가 많이 개선되었다.
컴파일과 실행
프로그래밍은 컴퓨터 언어로 프로그램 소스파일을 작성하는 것으로 시작한다. 컴퓨터는 C/C++, 자바와 같은 고급 언어로 작성된 프로그램을 직접 처리할 수 없기 때문에 컴퓨터가 실행 할 수 있는 기계어 코드로 변환하는 컴파일 과정이 필요하다. 컴파일을 전담하는 소프트웨어를 컴파일러라고 하며, 각 언어마다 전용 컴파일러가 존재한다.
자바는 소스프로그램의 확장자가 .java이고, JDK안에 담겨있는 자바 전용 컴파일러인 javac에 의해 .class파일로 컴파일되며, 컴파일된 클래스파일은 자바 가상 기계(JVM)에 의해 실행된다.
자바 프로그램 실행 프로세스
읽어주셔서 감사합니다. 😊
참고:
자바의 정석 - 남궁성
'JAVA' 카테고리의 다른 글
JAVA / 캐스팅(형변환)이란? (0) | 2020.03.30 |
---|---|
JAVA / 상수와 리터럴 (0) | 2020.03.27 |
JAVA / 데이터 타입 (0) | 2020.03.24 |
JAVA / 변수란 (0) | 2020.03.23 |
JAVA / JDK & JRE & JVM (0) | 2020.03.20 |