작성일
2022~23년도 노션에 작성한 내용 이동
20240110 (내용 보충 및 정리)
우선 자바(Java)는 컴퓨터 프로그래밍 언어(Programming Language) 중 하나입니다.
지금부터 많은 프로그래밍 언어 중 자바를 사용하는 경우는 언제인지, 특징은 무엇인지, 어떻게 만들어진 언어인지 등 하나씩 살펴봅시다.
자바 언어는 원래 소형기기를 위해 만들어진 언어였다.
자바의 특징 자체를 숙지하는 것이 중요한 게 아니라, 이를 통해 어떤 프로젝트에서 자바라는 언어가 유리한지를 파악하는 것이 중요하지 않을까 생각합니다. 또한 전체적으로 자바가 유리하지만 일부 기능에서 자바의 특징이 단점으로 작용한다면 어떤 해결 및 대안이 있는지를 파악하는 것도 좋을 것 같습니다.
기존의 절차지향 프로그래밍 언어에 객체지향 개념을 도입한 것으로, 객체지향 프로그래밍(Object Oriented Programming, OOP)을 위한 최적의 언어
자바로 작성된 소스코드는 모든 운영체제(Operating System, 플랫폼)에서 실행 가능
자바에는 가비지컬렉터
가 메모리(RAM)를 자동 관리하여 따로 메모리 관리를 하지 않아도 되서 아주 편리하다. 또한, 개발자에게 메모리 관리를 할 수 있는 수단이 제공되지 않기도 하다.
다양한 네트워크 프로그래밍 라이크러리(Java API)를 통해, 네트워크 관련 프로그램 개발을 돕는다.
언어마다 멀티쓰레드 지원은 운영체제에 따라 구현방법과 처리방식이 다르기 때문에 복잡하지만, 자바는 관련된 라이트버리(Java API)가 제공되므로 멀티쓰레드 프로그램이 모든 시스템에서 구현가능하다.
하나의 프로그램에서 동시에 여러 작업을 할 수 있게끔 해주는 기능이다. 예를 들어, 채팅 프로그램으로 채팅을 하면서 파일을 주고 받을 수 있는 상황 등이 멀티 쓰레드 기능에 의해 가능한 것이다. 요즘 대부분의 프로그램은 멀티 쓰레드로 작성되기 때문에 최신 프로그래밍 언어라면 필수로 제공되어야 하는 기능으로, 자바 또한 이를 지원한다.
보통 자바로 작성된 애플리케이션은 여러 개의 클래스로 구성되어 있어, 동적 로딩을 지원한다. 그렇기 때문에 실행했을 때, 모든 클래스가 한번에 로딩되지 않고 필요한 시점에 맞추러 클래스를 로딩하여 사용할 수 있다는 장점이 있다. 또한, 일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않고, 애플리케이션의 변경사항이 발생하여도 적은 작업만으로 처리 가능한 flexible한 애플리케이션을 만들 수 있다.
바이트코드(byte code)를 하드웨어의 기계어로 바로바로 변환해주는 JIT 컴파일러와 Hotspat과 같은 최신 기술이 도입되면서 JVM의 기능이 많이 향상되어 속도 문제는 상당 부분 개선된 상태이다.
모바일이나 대규모 기업환경, XML 등의 다양한 최신 기술을 지원하도록 개선함으로써 활용할 수 있는 영역이 더욱 넓어지고 있다. 모던 프로그래밍언어 (객체지향 + 함수형)로써 최신 기술을 담고 있다.
자바의 역사란, 곧 JDK 발전의 역사라고 할 수 있다. 그 이유는 다음과 같다.
썬 마이크로시스템즈에서 개발하여 공식 발표(1996년 1월)한 후 현재(2010년 이후) 오라클 회사로 인수하였고, 자바 언어로 된 프로그램을 제작하려면 무조건 JDK를 이용해야 하기 때문에 자바의 발전은 곧, JDK의 발전과 일맥상통한 것이다.
(자세한 설명은 개발환경구축 페이지에서 진행)**
JDK는 한마디로 자바 기반 소프트웨어를 개발하기 위한 도구들로 이루어진 패키지이다. 자바 기반 프로그램을 작성한다는 것은 이 JDK라는 도구 패키지를 이용한다는 의미이다. JDK는 리눅스처럼 라이센스 때문에 회사마다 출시하면서 종류가 다양해졌다. 또한 각 종류별로 발전의 과정에 따라 계속 새로운 버전이 생겨나 각 회사별 JDK 제품별로도 버전도 다양하다. JDK11 버전부터는 JDK 안에 있는 JRE가 무조건 함께 설치하도록 되어 있으며, 그러한 자바 실행 환경인 JRE에는 JVM이 포함되어 있다. 결국 JDK의 운영체제 선택에서 JRE, JVM 모두 비롯된다는 것이다.
회사별 JDK들의 버전 표기는 통일화되어 있으며, 사람들이 Java라고 하고 Java11이라 하는것은 결국 JDK의 버전을 의미한다고 볼 수 있다. 그래서 Java를 설치한다 라는 것은 JDK를 설치한다 라고 할 수 있다.
- JDK 1.0 (January 23, 1996)
- JDK 1.1 (Feburary 19, 1996)
- J2SE (December 8, 1998) : 기존의 자바보다 굉장히 많은 발전이 이루어져 Java2라고 불렀다. Java2에는 J2SE(표준형), J2ME(소형기기용), J2EE(대기업용)가 있는데, 그 중에서 표준형에 해당하며 현재 공부하며 사용하고 있는 버전인 J2SE를 기준으로 작성하겠다. 버전에 대한 자세한 설명은 여기하기.
- J2SE 1.3 (May 8, 2000)
- J2SE 1.4 (Feburary 6, 2002)
- J2SE 1.5/5.0 (September 30, 2004) : 두껍게 글씨 처리한 버전들은 크게 변화했을 때를 의미하는데, 큰 변화가 있기 전까지의 버전들은 약간의 develope만 이루어진 것이다.
- Java SE 6 (December 11, 2006)
- Java SE 7 (July 28, 2011)
- Java SE 8 (March 18, 2014) : 현재(2023년 기준) 사용하고 있는 JDK(Java 언어)는 Java SE 8를 시작으로 크게 다르지 않게 리뉴얼되고 있다. 너무 최신 버전을 사용하는 것은 아직 오류에 대한 확인 부족한 등등 위험요소가 있기 때문에, 그 근간이 되는 최신버전인 Java SE 8 포함 그 이후의 버전 中에서 사람들에 의해 이미 잘 파악된 버전을 사용하는 것이 좋다.
- Java SE 9 (September 21, 2017)
- Java SE 10 (March 20, 2018)
- Java SE 11 (September 25, 2018)
- Java SE 12 (March 19, 2019)
- Java SE 13 (September 17, 2019)
- · · ·