1. 자바 버전의 역사

Java의 역사는 Sun 프로그래머 그룹 이 TV 리모컨, 커피 메이커, 토스터, 은행 카드 등과 같은 작은 장치용 언어를 만들기로 결정한 1991년에 시작됩니다.

이러한 장치의 제조업체는 제품을 제어하기 위해 매우 다른 프로세서를 사용했기 때문에 특정 프로세서 또는 OS의 아키텍처에 연결하는 것이 매우 중요해졌습니다.

Java 제작자는 문제를 두 부분으로 나누기로 결정했습니다. 그들의 프로그램은 특정 프로세서의 기계 코드가 아니라 특별한 중간 코드로 컴파일됩니다. 차례로 중간 코드는 가상 머신 이라는 특수 프로그램에 의해 실행됩니다 .

대부분의 프로그래머는 컴퓨터를 기계라고 부릅니다.

흥미로운.

C++는 자바 언어의 기초로 받아들여져 크게 간소화되고 표준화되었습니다. C++에서 10가지 방법을 허용했다면 Java는 그 중 하나만 유지했습니다. 어떤 면에서 그것은 상형문자에서 알파벳으로의 전환과도 같았습니다.

Java의 첫 번째 버전은 1996년에 출시되었습니다. 그 이후로 Java는 전 세계에서 승리의 행진을 시작했으며, 이는 차례로 언어 자체의 진화와 성장을 자극했습니다. 오늘날 수백만 개의 라이브러리와 수십억 줄의 코드가 Java로 작성되고 새로운 버전의 Java가 6개월마다 릴리스됩니다.

이름 년도 수업 수
JDK 1.0 1996년 211
JDK 1.1 1997년 477
J2SE 1.2 1998년 1,524
J2SE 1.3 2000년 1,840
J2SE 1.4 2002년 2,723
J2SE 5.0 2004년 3,279
자바 SE 6 2006년 3,793
자바 SE 7 2011년 4,024
자바 SE 8 2014년 4,240
자바 SE 9 2017년 6,005
자바 SE 10 2018년 6,002
자바 SE 11 2018년 4,411
자바 SE 12 2019년 4,433
자바 SE 13 2019년 4,515

Java 버전이 정기적으로 릴리스되었지만 모든 버전이 프로그래머에게 동일한 의미를 지니는 것은 아닙니다. Java는 적절하게 발전했습니다.


2. 자바 2

첫 번째 큰 도약은 JDK 1.2의 출시와 함께 이루어졌습니다. 거기에는 많은 혁신이 있었기 때문에 Java 제작자는 Java 2 Platform Standard Edition 또는 줄여서 J2SE 1.2로 이름을 변경했습니다.

주요 혁신은 다음과 같습니다.

  • strictfp예어
  • 그래픽 작업을 위한 Swing 라이브러리
  • Java 프로그램의 실행을 가속화한 JIT 컴파일러
  • 거대한 컬렉션 세트
  • 전체 유니코드 지원: 일본어, 중국어 및 한국어.

오늘날 이러한 혁신은 그다지 커 보이지 않지만 모든 큰 프로젝트는 작은 것에서 시작됩니다. 소수의 프로그래머 그룹이 20년 전에 언어를 계속 개선하지 않았다면 Java는 오늘날 인기가 없었을 것입니다.


3. 자바 5

JDK 1.5는 2004년 9월에 출시되었습니다. 또한 많은 혁신을 도입했기 때문에 새 이름을 사용할 수밖에 없었습니다. 버전 1.5, 1.6 및 1.7 대신에 5.0, 6.0 및 7.0을 사용하기로 결정했습니다. 따라서 JDK 1.5의 전체 이름은 Java 2 Standard Edition 5.0 이었습니다.

이 업데이트에는 언어의 추가 개발이 불가능했을 요소가 포함되어 있습니다.

주석 . 주요 최신 프레임워크의 절반은 Spring 및 Hibernate에서 JUnit에 이르기까지 주석을 기반으로 구축됩니다.

제네릭 . 제네릭은 컬렉션(및 훨씬 더 많은 기능)의 기능을 새로운 차원으로 끌어 올렸습니다. 코드가 더 간단하고 간결하며 안전해졌습니다.

Autoboxing/unboxing 은 기본 유형과 래퍼 유형 간의 자동 변환입니다. 이로 인해 코드를 훨씬 더 쉽게 작성하고 읽을 수 있었고 컬렉션이 더욱 대중화되었습니다.

루프 foreach 이제 프로그래머가 작성하는 모든 루프의 절반 이상을 차지합니다. 그리고 물론 컬렉션을 작업할 때 없어서는 안 될 필수 요소입니다.

열거 형은 또 다른 멋진 새 기능입니다. 많은 것을 아름답게 단순화할 수 있습니다.

이것이 모든 혁신이 아닙니다. 수백 개의 새로운 클래스가 추가되었습니다. 중요한 것은 그것들이 올바른 혁신이었고 Java의 인기를 또 한 번 강력하게 끌어올렸다는 것입니다.


4. 자바 6

Java 6는 많은 작은 개선 사항과 이름에서 숫자 2를 버린 것으로 기억됩니다. 더 이상 "Java 2 Standard Edition 6.0"이 아니라 단순히 "Java Standard Edition 6.0"이었습니다.

흥미로운 혁신 중 일부는 다음과 같습니다.

Java Compiler API를 사용하면 코드에서 직접 Java 컴파일러를 호출할 수 있습니다 . 즉, 프로그램에서 클래스 코드를 나타내는 텍스트를 생성하고 Java Compiler API 의 메서드를 호출하여 컴파일 한 다음 즉시 컴파일된 클래스의 메서드 호출을 시작할 수 있습니다. 이 능력이 삶을 크게 단순화시키는 모든 개발 영역이 있습니다.

Java 프로그램 내에서 직접 JavaScript를 실행할 수 있게 되었습니다 . 이 기능은 JavaSE 6에 Rhino JavaScript 엔진이 포함되어 있기 때문에 나타났습니다.


5. 자바 7

Java 7은 2011년 7월에 릴리스되었습니다. 많은 개선이 있어야 했지만 프로그래머는 계획된 것의 일부만 추가했습니다. 특히 다음과 같은 내용을 추가했습니다.

데이터 입력 및 출력 작업을 위한 새로운 라이브러리. New Input Output API 로 알려져 있으며 패키지에 있습니다 java.nio.

컴파일 시간에 Java 컴파일러의 자동 유형 추론을 통해 프로그래머는 코드를 적게 작성할 수 있습니다. 컴파일러는 더 똑똑해졌고, 그것은 시작에 불과했습니다.

switch 문은 문자열을 대/소문자 값으로 사용할 수 있는 기능을 얻었습니다.

자동 리소스 관리도 크게 개선되었습니다. try-with-resources구문을 사용하면 Java 프로그램이 더 이상 필요하지 않을 때 데이터 스트림을 닫을 수 있습니다.

다른 많은 변경 사항이 있었지만 현재 Java 학습 단계에서는 그다지 중요하지 않습니다.


6. 자바 8

Java 8은 2014년 3월에 출시되었으며 Java의 가장 강력한 최신 업데이트였습니다.

무엇보다 프로그래머는 람다 식과 기능적 인터페이스(주석)를 추가한 것을 기억합니다 @FunctionalInterface. 우리는 그것들을 레벨 21에서 검토할 것입니다. 귀하의 코드는 다시는 동일하지 않을 것입니다.

컬렉션에 대한 스트림도 추가되어 람다 식과 함께 코드를 훨씬 더 간결하게 작성할 수 있게 되었습니다. 항상 훨씬 더 읽기 쉬운 것은 아니지만.

흥미로운.

그리고 세 번째 큰 변화는 Java 8에서 날짜 및 시간 작업을 위한 완전히 새로운 API인 Date Time API를 도입한 것입니다 . 우리는 가까운 장래에 그것을 공부할 것입니다.


7. 자바 9

Java 9은 2017년 9월에 릴리스되었습니다. 그 때부터 Java 작성자는 새 버전을 더 자주, 즉 6개월마다 릴리스하기로 결정했습니다. 그들은 아마도 Google 크롬 브라우저 개발자가 채택한 접근 방식에 깊은 인상을 받았을 것입니다.

Java 9 릴리스는 Java 머신의 내부에 더 중점을 두었습니다. 일반 프로그래머에게 제공한 가장 중요한 기능은 프로그램을 모듈로 분할하는 기능이었습니다. 이것은 수만 개의 클래스가 있거나 코드가 플러그인을 동적으로 언로드할 때 매우 편리합니다.

그러나 가까운 장래에 우리에게 거의 쓸모가 없을 것입니다.


8. 자바 11

Java 9 출시 6개월 후 Java 10이 나왔고, 또 6개월 후에 Java 11이 나왔습니다.

이 기간 동안 많은 작은 개선이 이루어졌지만 대부분 다음 두 가지만 기억할 것입니다.

유니코드 10에 대한 지원이 추가되었습니다. 이제 Java 프로그램에서 이모지를 사용할 수 있습니다. 부울 유형으로 작업하는 것과 동일한 방식으로 작업할 수 있습니다.

타입 추론이 개선되어 마음에 드실 var키워드 가 등장했습니다.

이제 다음을 작성할 수 있습니다.

var str = "Hello";

그리고 컴파일러는 이것을 다음과 같이 변환합니다.

String str = "Hello";

그러나 약간의 손실도있었습니다. Java 제작자는 JDK 11에서 JavaFX, Java EE 및 CORBA와 같은 라이브러리를 삭제했습니다.


9. 호환성의 중요성

새 버전이 출시되면 프로그래머는 종종 처음부터 시작하기를 원합니다. 결국, 코드가 처음부터 어떻게 작성되었어야 했는지 절대적으로 긍정적일 때 오래된 버그를 수정하고 싶은 사람이 어디 있겠습니까?

그러나 역사는 그러한 접근 방식을 지원하지 않습니다. 프로그래머가 프로그램의 새 버전을 출시할 때마다 사용자의 90%가 이전 버전을 사용하고 있습니다. 그들은 프로그램의 새로운 기능을 사용하거나 무시할 수 있지만 사용자가 싫어하는 것은 잘 작동했던 것이 작동하지 않는 것입니다.

프로그래머가 호환되지 않는 새 버전을 출시했을 때 많은 훌륭한 제품이 죽었습니다. 또는 단순히 주요 변경 사항을 적용했을 때. 예를 들어 Windows 8에서 시작 버튼을 버린다는 아이디어는 사용자에게 매력적이지 않았습니다. Windows 10의 출시는 Window 8에서 제거된 것의 절반을 되찾았습니다.

게다가 Windows에서는 Windows 95용으로 20년 전에 작성된 프로그램이나 MS DOS 3.0용으로 30년 전에 작성된 프로그램을 실행할 수 있습니다. 이것이 Windows가 여전히 인기 있는 이유 중 하나입니다.

그리고 개발자가 호환성에 관심이 없다면 Java는 지금처럼 인기가 없을 것입니다. Java 머신의 새 버전, SDK의 새 버전 또는 클래스에 대한 주요 변경 사항이 있을 때마다 1996년 1월 이후에 작성된 모든 Java 코드는 계속 작동합니다.

이는 일반적으로 아무 것도 제거하지 않고 새 메서드, 클래스 및 패키지를 추가하기만 하면 됩니다. 이 접근 방식에는 장단점이 있습니다.

한편으로 Java는 오래되고 최적이 아니며 불필요한 코드의 형태로 많은 양의 짐을 끌고 다닙니다. 반면에 Java 11로 작성된 프로젝트는 항상 Java 5 및 Java 2로 작성된 라이브러리를 사용하는 Java 8로 작성된 라이브러리를 사용할 수 있습니다. 이 뒤죽박죽 코드는 잘 작동합니다.

C++ 언어를 사용하면 32비트 및 64비트 플랫폼용으로 컴파일된 라이브러리를 동일한 프로젝트에서 사용할 수 없습니다. 한 라이브러리에서 사용되는 유형이 1바이트를 사용하고 다른 라이브러리에서 사용되는 유형이 2바이트를 사용한다는 사실을 갑자기 발견하면 큰 골칫거리가 될 것입니다 char.


10. 더 이상 사용되지 않음

따라서 Java 제작자는 아무 것도 제거하지 않고 새 클래스와 패키지만 추가하기로 결정했습니다. 그러나 기존 차선 솔루션에 대한 새로운 가치 있는 대안이 있음을 프로그래머에게 어떻게 알릴 수 있습니까?

이를 위해 그들은 @Deprecated주석을 내놓았습니다.

일부 메소드 또는 클래스가 더 이상 사용되지 않는 경우 선언 옆에 이 주석이 추가됩니다. 이는 프로그래머가 코드를 사용하는 것을 권장하지 않음을 의미합니다.

더 이상 사용되지 않는 클래스나 메서드를 계속 사용할 수 있지만 권장되지는 않습니다.

사람들은 권장되지 않는 일을 얼마나 자주 합니까? 거의 항상 🙂

많은 클래스가 20년 동안 더 이상 사용되지 않았습니다. 사용되어 왔으며 여전히 사용되고 있습니다. 사람들은 그것들에 익숙하거나 단지 편리할 뿐입니다. 하지만 어느 시점에서 제거될 위험이 있으므로 사용하지 않는 것이 좋습니다.

IntelliJ IDEA를 포함한 모든 최신 IDE는 @Deprecated주석을 처리할 수 있습니다. 더 이상 사용되지 않는 클래스 및 메서드의 이름은 취소선 형식을 사용하여 표시됩니다. 이 같은:

Date date = new Date();
int day = date.getDay();

더 이상 사용되지 않는 클래스는 매우 인기가 있고 종종 코드에서 발견되므로 곧 그 중 일부를 살펴보겠습니다.