자바(JAVA)에 대하여
자바의 역사
자바는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링이 만들었는데 이 언어는 원래 제임스 사무실 밖에 있던 오크 나무에서 이름을 따와 오크, 혹은 그린이라고 불렀으나 단어 리스트 중 무작위로 뽑은 JAVA를 선택하였다. 제임스는 C와 C++ 스타일의 언어와 가상 머신을 구현하고자 했는데 첫 공개 버전은 1995년의 자바 1.0이었고 한 번 쓰고 어느 곳에도 실행하는 것을 약속하였고 인기 플랫폼에 무료 런타임을 제공했다. 대부분의 브라우저들은 곧 자바 애플릿을 웹페이지 안에서 실행할 수 있었고 자바의 인기는 급상승했다. 자바2의 출현으로 여러 다양한 플랫폼에서 사용할 수 있는 설정들을 만들었다. 예를 들어 J2EE는 엔터프라이즈 애플리케이션을 실행할 수 있었고, J2ME는 모바일 애플리케이션을 실행할 수 있었다.
자바의 철학
자바 언어는 5가지의 핵심 목표가 존재하는데 1. 객체 지향 방법론을 사용해야한다 2. 같은 프로그램이 여러 운영 체제에서 실행될 수 있어야 한다 3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다 4. 원격 코드를 안전하게 실행할 수 있어야 한다. 5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다. 자바는 초기 설계부터 객체 지향 언어로 설계 됐다. 자바만의 실행 코드인 바이트코드라는 중간 코드를 컴파일러에 의해 생성하고 자바 가상 머신인 JVM에 의해 해석되어 실행된다. 그렇기에 C나 C++코드로 작성된 코드보다 일대일 상황에선 실행 속도가 느리나 다양한 플랫폼이나 운영체제에서 실행할 수 있다는 게 장점이다.
자바 실행 코드 생성 및 CPU와의 관계
자바가 여러 개의 CPU에서 같은 코드가 실행되기 위해서는 C와 C++의 프로그램의 실행 구조와는 다른 방식이 필요하다. C와 C++이 특정 CPU의 기계어 코드를 직접 생성하면 이 기계어 코드가 메모리에 적체되어 바로 실행되는데 C랑 C++은 CPU가 달라지면 컴파일러도 달라져야한다. 임베디드 프로그램의 경우, gcc는 gcc소스를 사용해서 특정 CPU를 지정하고, 컴파일러로 크로스 컴파일러를 만들 수 있다. gcc를 사용하고 싶지 않거나 gcc 컴파일러가 없다면 특정 CPU 개발 도구를 구입 해서 사용하면 된다. 그러나 자바를 사용하여 다른 CPU에서 실행되도록 하려면 직접 CPU의 기계어 코드를 생성해서는 안 된다. 대신 자바는 바이트코드를 생성하는데 이것을 JVM이 해석하여 실행한다. JVM이 인터프리터가 되어 코드 해석 방식을 실행하여 같은 바이트코드를 가지고 여러 가지의 CPU에서 실행이 가능해진다. JVM은 CPU와 직접적 관계가 있다.
자바의 버전
버전은 보통 Java SE, JDK/JRE의 버전을 말한다. JDK는 표준 라이브러리를 포함하고 JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 API가 바뀐다. 초기 1.0과 1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 JSDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭을 사용한다. J2SE라는 명칭도 Java SE로 변경되었다. 자바 버전 체계의 메이저 버전이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어서 1.5버전부터 5.0, 6 형태로 제품 버전을 코드 버전과 별개로 발표하고 있는 중이다. 언어 자체는 자바 언어 명세에서 정의되며, 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나 JDK 5와 함께 바뀐 JLS 3판에서 제네릭 타입, 애너테이션 같은 기능이 도입되면서 상당히 바뀌었다. JDK 7에서는 자바 언어에 상당한 변화가 계획돼 있었으나 JDK7로 예정됐던 계획이 JDK7과 JDK8로 나뉘면서 JDK7에는 상대적으로 사소한 언어 특성만 추가됐다. 구체적으로 이진수 표기 추가, 가독성을 위해 수 표기에 밑줄을 허용, 스위치문에서 문자열 사용, 제네릭 타입 객체 생성 시 타입 추론, 자동 자원 해제를 위한 try 문법 등이 추가됐다.