Page semi-protected

자바(프로그래밍 언어)

Java (programming language)
자바
패러다임다중 패러다임: 일반, 객체 지향(클래스 기반), 기능, 명령, 반사, 동시
설계자 :제임스 고슬링
디벨로퍼오라클사
첫 등장1995년 5월 23일; 28년 전 (1995-05-23)[1]
타이핑규율정적, 강력, 안전, 주격, 명시적, 성명적
메모리관리쓰레기자동수거
파일 확장명.java, .class, .jar, .jmod
웹사이트www.oracle.com/java/, www.java.com , dev.
영향을 받음
CLU,[2] Simula67,[2] Lisp,[2] Smalltalk,[2] Ada 83, C++,[3] C#,[4] 에펠,[5] 메사,[6] Modula-3,[7] 오베론,[8] 오브젝티브-C,[9] UCSD 파스칼,[10][11] 오브젝티브 파스칼[12]
영향받은
Ada 2005, BeanShell, C#, Chapel,[13] Clojure, ECMAscript, Fantom, Gambas,[14] Groovy, Hack,[15] Haxe, J#, Kotlin, PHP, Python, Scala, Seed7, Vala, JavaScript, JS++

Java는 높은 수준의 클래스 기반객체 지향 프로그래밍 언어로 구현 종속성이 가능한 한 적도록 설계되었습니다.이 언어는 프로그래머들이 한 번 쓰고 어디서나 실행할 수 있도록 하는 범용 프로그래밍 언어로,[16] 컴파일된 자바 코드를 재컴파일할 필요 없이 자바를 지원하는 모든 플랫폼에서 실행할 수 있음을 의미합니다.[17]Java 애플리케이션은 일반적으로 기본 컴퓨터 아키텍처에 관계없이 모든 Java 가상 머신(JVM)에서 실행될 수 있는 바이트 코드로 컴파일됩니다.자바의 구문CC++와 비슷하지만 둘 중 하나보다 낮은 수준의 설비를 가지고 있습니다.Java 런타임은 일반적으로 기존 컴파일 언어에서는 사용할 수 없는 동적 기능(예: 리플렉션 런타임 코드 수정)을 제공합니다.2019년 기준으로 자바는 GitHub에 따르면 가장 인기 있는 프로그래밍 언어 중 하나이며,[citation not found][18][19] 특히 클라이언트-서버 웹 애플리케이션에 사용되며 9백만 명의 개발자가 있다고 보고되었습니다.[20]

자바는 원래마이크로시스템즈에서 제임스 고슬링에 의해 개발되었습니다.1995년 5월 썬 마이크로시스템즈의 자바 플랫폼의 핵심 컴포넌트로 출시되었습니다.원본 및 참조 구현 Java 컴파일러, 가상 머신 및 클래스 라이브러리는 원래 Sun이 독점 라이센스로 릴리스했습니다.2007년 5월 현재, 선은 자바 커뮤니티 프로세스의 사양을 준수하여 대부분의 자바 기술을 GPL-2.0 전용 라이선스로 재라이선스했습니다.Oracle은 자체 HotSpot Java Virtual Machine을 제공하지만, 공식적인 참조 구현은 OpenJDK JVM이며, 이는 무료 오픈 소스 소프트웨어이며 대부분의 개발자가 사용하며 거의 모든 Linux 배포 환경에서 기본 JVM입니다.

2023년 9월 현재 자바 21이 최신 버전이고 자바 17, 11, 8이 현재 LTS(Long-term support) 버전입니다.

역사

자바 마스코트 듀크
2008년 자바의 창시자 제임스 고슬링
2002년부터 2022년까지의 TIOBE 프로그래밍 언어 인기 지수 그래프.자바는 2015년 중반부터 2020년 초까지 꾸준히 1위를 차지했습니다.

제임스 고슬링, 마이크 셰리던, 패트릭 노턴은 1991년 6월 자바 언어 프로젝트를 시작했습니다.[21]자바는 원래 대화형 텔레비전을 위해 고안되었지만, 그 당시에는 디지털 케이블 텔레비전 산업에 비해 너무 발전되어 있었습니다.[22]이 언어는 처음에 고슬링의 사무실 밖에 서있는 오크 나무의 이름을 따서 오크라고 불렸습니다.나중에 이 프로젝트는 그린(Green)이라는 이름으로 진행되었고 마침내 인도네시아 커피의 한 종류인 자바 커피(Java coffee)에서 자바(Java)로 이름이 바뀌었습니다.[23]고슬링은 시스템과 애플리케이션 프로그래머들이 친숙하게 생각할 수 있는 C/C++ 스타일의 구문으로 자바를 설계했습니다.[24]

썬 마이크로시스템즈는 1996년 자바 1.0으로 최초의 공개 구현을 발표했습니다.[25]WORA(Write Once Write, 어디서나 실행 가능) 기능을 통해 인기 플랫폼에서 비용 없이 실행할 수 있도록 보장했습니다.상당히 안전하고 구성 가능한 보안 기능을 갖추고 있어 네트워크 및 파일 액세스 제한을 허용했습니다.주요 웹 브라우저는 곧 웹 페이지 내에서 자바 애플릿을 실행할 수 있는 기능을 통합했고 자바는 빠르게 인기를 끌었습니다.자바 1.0 컴파일러는 Arthur van Hoff에 의해 자바 1.0 언어 사양을 엄격하게 준수하기 위해 자바로 다시 작성되었습니다.[26]자바 2(1998년 12월에 처음에 J2SE 1.2로 출시됨)의 등장과 함께, 새로운 버전은 다양한 유형의 플랫폼을 위해 여러 구성이 구축되었습니다.J2EE는 일반적으로 서버 환경에서 실행되는 엔터프라이즈 애플리케이션을 위한 기술과 API를 포함했으며, J2ME는 모바일 애플리케이션에 최적화된 API를 제공했습니다.데스크톱 버전의 이름이 J2SE로 변경되었습니다.2006년 마케팅 목적으로 선은 새로운 J2 버전을 각각 자바 EE, 자바 ME, 자바 SE로 이름을 바꾸었습니다.

1997년 썬 마이크로시스템즈는 ISO/IEC JTC 1 표준 기구에 접근하였고 이후 Ecma International에 접근하여 자바를 공식화하였으나 곧 이 과정에서 철수하였습니다.[27][28][29]자바는 자바 커뮤니티 프로세스를 통해 통제되는 사실상표준으로 남아있습니다.[30]한때 Sun은 독점적인 소프트웨어 상태에도 불구하고 대부분의 Java 구현을 무료로 사용할 수 있도록 했습니다.Sun은 Java Enterprise System과 같은 전문 제품에 대한 라이센스 판매를 통해 Java로부터 수익을 창출했습니다.

2006년 11월 13일, 썬은 자바 가상 머신(JVM)의 대부분을 GPL-2.0 전용 라이선스 조건에 따라 자유 및 오픈 소스 소프트웨어(FOSS)로 출시했습니다.2007년 5월 8일, 썬은 JVM의 모든 핵심 코드를 자유 소프트웨어/오픈 소스 배포 조건 하에서 사용할 수 있게 하였고, 썬이 저작권을 보유하지 않은 코드의 일부는 제외하였습니다.[31]

선의 부사장인 리치 그린(Rich Green)은 자바와 관련하여 선의 이상적인 역할은 전도사라고 말했습니다.[32]Oracle Corporation이 2009-10년 Sun Microsystems를 인수한 이후 Oracle은 참여 및 투명성 커뮤니티를 조성하기 위해 끊임없는 노력을 기울이며 Java 기술의 책임자로 자처하고 있습니다.[33]이로 인해 Oracle은 Android SDK 내에서 Java를 사용한 직후 Google을 상대로 소송을 제기하지 않았습니다(Android 섹션 참조).

2010년 4월 2일, 제임스 고슬링은 오라클에서 사임했습니다.[34]

2016년 1월 오라클은 JDK 9 기반의 자바 런타임 환경이 브라우저 플러그인을 중단할 것이라고 발표했습니다.[35]

자바 소프트웨어는 노트북에서 데이터 센터, 게임 콘솔에서 과학적인 슈퍼컴퓨터에 이르기까지 모든 것에서 실행됩니다.[36]

Oracle 등에서는 이전 버전의 해결되지 않은 보안 문제로 인해 이전 버전과 지원되지 않는 버전의 Java를 제거할 것을 강력히 권장합니다.[37]

원칙

자바 언어를 만드는 데에는 5가지 주요 목표가 있었습니다.[17]

  1. 단순하고 객체 지향적이며 친숙해야 합니다.
  2. 견고하고 안전해야 합니다.
  3. 아키텍처가 중립적이고 휴대성이 뛰어나야 합니다.
  4. 고성능으로 실행해야 합니다.
  5. 해석, 스레드동적이어야 합니다.

버전

2023년 9월 현재 Java 8, 11, 17 및 21은 LTS(Long-Term Support) 버전으로 지원됩니다.[38]

오라클은 2019년 1월 상업용으로 기존 버전의 Java 8 LTS에 대한 마지막 무료 공개 업데이트를 발표했습니다.다른 벤더들은 여전히 보안 및 기타 업그레이드를 받고 있는 OpenJDK 18 및 8, 11 및 17의 무료 빌드를 제공하기 시작했습니다.

자바의 주요 릴리스 버전 및 릴리스 날짜:

버전 날짜.
JDK 베타 1995
JDK 1.0 1996년1월23일[39]
JDK 1.1 1997년2월19일
J2SE 1.2 1998년12월8일
J2SE 1.3 2000년5월8일
J2SE 1.4 2002년2월6일
J2SE 5.0 2004년9월30일
자바 SE 6 2006년12월11일
자바 SE 7 2011년7월28일
Java SE 8 (LTS) 2014년3월18일
자바 SE 9 2017년9월21일
자바 SE 10 2018년3월20일
Java SE 11 (LTS) 2018년9월25일[40]
자바 SE 12 2019년3월19일
자바 SE 13 2019년9월17일
자바 SE 14 2020년3월17일
자바 SE 15 2020년9월15일[41]
자바 SE 16 2021년3월16일
Java SE 17 (LTS) 2021년9월14일
자바 SE 18 2022년3월22일
자바 SE 19 2022년9월20일
자바 SE 20 2023년3월21일
Java SE 21 (LTS) 2023년9월19일

판본

Sun은 서로 다른 애플리케이션 환경을 대상으로 하는 4가지 버전의 Java를 정의 및 지원하고 있으며, API의 많은 부분을 플랫폼 중 하나에 속하도록 세분화했습니다.플랫폼은 다음과 같습니다.

Java API의 클래스는 패키지라는 별도의 그룹으로 구성됩니다.각 패키지에는 관련 인터페이스, 클래스, 하위 패키지 및 예외가 포함되어 있습니다.

Sun은 또한 Personal Java라는 에디션을 제공했는데, 이 에디션은 나중에 표준 기반 Java ME 구성 프로파일 쌍으로 대체되었습니다.

실행체계

Java JVM 및 바이트 코드

Java의 설계 목표 중 하나는 이동성입니다. 즉, Java 플랫폼을 위해 작성된 프로그램은 적절한 실행 시간 지원을 통해 하드웨어와 운영 체제의 모든 조합에서 유사하게 실행되어야 합니다.이것은 자바 언어 코드를 아키텍처별 기계 코드가 아닌 자바 바이트 코드라는 중간 표현으로 컴파일함으로써 달성됩니다.Java 바이트코드 명령은 시스템 코드와 유사하지만 호스트 하드웨어용으로 특별히 작성된 VM(가상 시스템)에 의해 실행됩니다.일반적으로 최종 사용자는 장치에 설치된 독립 실행형 Java 애플리케이션용 Java Runtime Environment(JRE) 또는 Java 애플릿용 웹 브라우저를 사용합니다.

표준 라이브러리는 그래픽, 쓰레드, 네트워킹과 같은 호스트별 기능에 액세스할 수 있는 일반적인 방법을 제공합니다.

범용 바이트 코드를 사용하면 포팅이 간단합니다.그러나 바이트 코드를 기계 명령어로 해석하는 오버헤드로 인해 해석된 프로그램은 거의 항상 네이티브 실행 파일보다 더 느리게 실행됩니다.런타임 동안 바이트 코드를 기계 코드로 컴파일하는 JIT(Just-in-time) 컴파일러는 초기 단계부터 도입되었습니다.Java의 Hotspot 컴파일러는 실제로 하나에 두 개의 컴파일러가 있으며, GraalVM(예: Java 11에 포함되나 Java 16에서는 제거됨)을 사용하여 계층형 컴파일이 가능합니다.[47]자바 자체는 플랫폼에 독립적이며 자바 바이트 코드를 플랫폼의 기계 언어로 변환하는 자바 가상 머신(JVM)에 의해 실행되는 특정 플랫폼에 적응되어 있습니다.[48]

성능

자바로 작성된 프로그램은 C++[49][50]로 작성된 프로그램보다 속도가 느리고 메모리가 더 많이 필요한 것으로 정평이 나 있습니다.그러나 1997/1998년에 Just-in-time 컴파일이 자바 1.1에 도입되고,[51] 더 나은 코드 분석을 지원하는 언어 기능(내부 클래스, StringBuilder 클래스, 선택적 주장 등)이 추가되고, 자바 가상 머신에 최적화되면서 자바 프로그램의 실행 속도가 크게 향상되었습니다.HotSpot이 2000년에 Sun의 기본 JVM이 되는 것과 같은.자바 1.5를 사용하면 성능이 향상되었으며,java.util.concurrent패키지는 ConcurrentMaps 및 기타 멀티코어 컬렉션의 잠금이 없는 구현을 포함하며 Java 1.6과 함께 더욱 개선되었습니다.

비JVM

일부 플랫폼은 자바에 대한 직접적인 하드웨어 지원을 제공하며, 소프트웨어 자바 가상 머신 대신 하드웨어에서 자바 바이트코드를 실행할 수 있는 마이크로 컨트롤러가 있으며,[52] 일부 ARM 기반 프로세서는 Jazelle 옵션을 통해 자바 바이트코드를 실행할 수 있는 하드웨어 지원을 제공할 수 있습니다.ARM의 현재 구현에서는 대부분 지원이 떨어졌습니다.

메모리 자동관리

Java는 자동 가비지 콜렉터를 사용하여 개체 수명 주기의 메모리를 관리합니다.프로그래머는 객체가 언제 생성되는지를 결정하며, 자바 런타임은 객체가 더 이상 사용되지 않을 때 메모리를 복구할 책임이 있습니다.개체에 대한 참조가 남아 있지 않으면 도달할 수 없는 메모리는 가비지 수집기에 의해 자동으로 해제될 수 있는 자격을 얻게 됩니다.프로그래머의 코드가 더 이상 필요하지 않은 개체에 대한 참조를 보유하고 있는 경우, 일반적으로 더 이상 필요하지 않은 개체가 여전히 사용 중인 컨테이너에 저장되어 있는 경우에도 메모리 누수와 유사한 문제가 발생할 수 있습니다.[53]존재하지 않는 개체에 대한 메서드가 호출되면 null 포인터 예외가 표시됩니다.[54][55]

자바의 자동 메모리 관리 모델에 숨겨진 아이디어 중 하나는 프로그래머들이 수동 메모리 관리를 수행해야 하는 부담을 덜 수 있다는 것입니다.일부 언어에서는 개체 생성을 위한 메모리가 스택에 암묵적으로 할당되거나 에서 명시적으로 할당 및 해제됩니다.후자의 경우, 메모리 관리의 책임은 프로그래머에게 있습니다.프로그램이 개체의 할당을 해제하지 않으면 메모리 누수가 발생합니다.[53]프로그램이 이미 할당 해제된 메모리에 액세스하거나 할당 해제를 시도하면 결과가 정의되지 않아 예측하기 어렵고 프로그램이 불안정해지거나 충돌할 가능성이 있습니다.는 스마트 포인터를 사용하여 부분적으로 해결할 수 있지만, 이로 인해 오버헤드와 복잡성이 가중됩니다.가비지 컬렉션은 논리적 메모리 유출을 방지하지 못합니다. 즉, 메모리가 여전히 참조되지만 사용되지 않는 경우입니다.[53]

쓰레기 수거는 언제든지 이루어질 수 있습니다.프로그램이 유휴 상태일 때 발생하는 것이 이상적입니다.힙에 사용 가능한 메모리가 부족하여 새 개체를 할당할 수 없는 경우 트리거할 수 있으므로 프로그램이 일시적으로 중단될 수 있습니다.Java에서는 명시적인 메모리 관리가 불가능합니다.

Java는 개체 주소를 산술적으로 조작할 수 있는 C/C++ 스타일 포인터 산술을 지원하지 않습니다(예: 오프셋을 추가하거나 빼서).이를 통해 가비지 수집기는 참조된 개체를 재배치할 수 있으며 유형 안전과 보안을 보장합니다.

C++ 및 일부 다른 객체 지향 언어와 마찬가지로 자바의 원시 데이터 유형 변수는 힙이 아닌 필드(객체의 경우) 또는 스택(메소드의 경우)에 직접 저장됩니다.이는 성능상의 이유로 자바의 디자이너들이 의식적으로 내린 결정이었습니다.

Java에는 여러 유형의 가비지 수집기가 포함되어 있습니다.자바 9 이후 HotSpot은 G1GC(Garbage First Garbage Collector)를 기본값으로 사용합니다.[56]그러나 힙을 관리하는 데 사용할 수 있는 다른 가비지 수집기도 몇 가지 있습니다.자바의 대부분의 애플리케이션에서는 G1GC로 충분합니다.이전에는 Java 8에서 Parallel Garbage Collector를 사용했습니다.

메모리 관리 문제를 해결하는 것은 프로그래머가 특히 예외가 있는 경우에 네트워크 또는 데이터베이스 연결, 파일 핸들 등과 같은 다른 종류의 리소스를 적절하게 처리해야 하는 부담을 덜어주지 못합니다.

구문

Java Core 클래스의 종속성 그래프(jdeps 및 Gephi로 작성)

자바의 구문은 C++C의 영향을 많이 받습니다.구조화, 일반화, 객체 지향 프로그래밍을 위한 구문을 결합한 C++와 달리 자바는 객체 지향 언어로서 거의 독점적으로 구축되었습니다.[17]모든 코드는 클래스 내부에 작성되며, 성능상의 이유로 개체가 아닌 기본 데이터 유형(즉, 정수, 부동 소수점 숫자, 부울 문자)을 제외한 모든 데이터 항목은 개체입니다.자바는 C++의 몇몇 인기있는 측면들을 재사용합니다.printf방법).

C++와 달리 Java는 클래스에 대해 연산자 오버로드[57] 또는 다중 상속을 지원하지 않지만 인터페이스에 대해서는 다중 상속을 지원합니다.[58]

자바는 C++와 유사한 코멘트를 사용합니다.댓글에는 세 가지 스타일이 있습니다: 두 개의 슬래시로 표시된 한 줄 스타일 (//), 로 오픈된 다중 라인 스타일/*로 마감했습니다.*/, 자바독 댓글 스타일은 다음과 같이 시작되었습니다./**로 마감했습니다.*/. 자바독 주석 스타일은 사용자가 자바독 실행 파일을 실행하여 프로그램에 대한 문서를 만들 수 있으며, 개발자가 IDE 내의 문서에 액세스할 수 있도록 Eclipse와 같은 일부 통합 개발 환경(IDE)에서 읽을 수 있습니다.

Hello world

전통적인 헬로 월드 프로그램은 자바로 다음과 같이 쓸 수 있습니다.[59]

일반의 학급 주된 {     일반의 정적인 공허한 주된([] 아그스) {         시스템..나가..인쇄된("헬로 월드!"); // 문자열을 콘솔에 인쇄합니다.     } } 

모든 소스 파일의 이름은 해당 파일에 포함된 공용 클래스의 이름을 따서 붙여져야 합니다..java,예를들면,HelloWorldApp.java. 그것은 먼저 자바 컴파일러를 사용하여 파일을 생성하는 바이트코드로 컴파일되어야 합니다..class접미사()Main.class, 이 경우).그래야만 실행되거나 실행될 수 있습니다.Java 원본 파일은 공용 클래스를 하나만 포함할 수 있지만, 공용 액세스 수정자가 아닌 여러 개의 클래스와 임의 수의 공용 내부 클래스를 포함할 수 있습니다.원본 파일에 여러 클래스가 포함된 경우 하나의 클래스를 만들어야 합니다(에 의해 도입됨).classkeyword) public(preceded by thepublic키워드)를 입력하고 해당 퍼블릭 클래스 이름으로 소스 파일의 이름을 지정합니다.

public으로 선언되지 않은 클래스는 어느 곳에도 저장될 수 있습니다..java파일. 컴파일러는 소스 파일에 정의된 각 클래스에 대한 클래스 파일을 생성할 것입니다.클래스 파일의 이름은 클래스의 이름으로 .class가 추가됩니다.클래스 파일 생성의 경우 익명 클래스는 자신의 이름이 엔클로저 클래스 이름, $ 및 정수의 연결인 것처럼 처리됩니다.

키워드를 public메서드를 다른 클래스의 코드에서 호출하거나 클래스 계층 구조 외부의 클래스에서 클래스를 사용할 수 있음을 나타냅니다.[60]클래스 계층 구조는 .java 파일이 있는 디렉터리 이름과 관련이 있습니다.이를 액세스 수준 수정자라고 합니다.다른 접근 수준 수식어는 키워드를 포함합니다.private(동일 클래스에서만 접근 가능한 메소드) 및protected(동일한 패키지의 코드를 액세스할 수 있게 해줍니다.)[60]코드 조각이 개인 메서드 또는 보호 메서드에 액세스하려고 하면 JVM이 다음을 던집니다.SecurityException.

키워드를static[18] 메서드 앞에는 클래스에만 연결되고 해당 클래스의 특정 인스턴스에는 연결되지 않는 정적 메서드가 표시됩니다.개체에 대한 참조 없이 정적 메서드만 호출할 수 있습니다.정적 메서드는 정적이 아닌 클래스 멤버에 액세스할 수 없습니다.정적으로 지정되지 않은 메서드는 인스턴스 메서드이며 동작하려면 클래스의 특정 인스턴스가 필요합니다.

키워드를void기본 메서드는 호출자에게 어떤 값도 반환하지 않음을 나타냅니다.자바 프로그램이 에러 코드와 함께 종료하려면 다음을 호출해야 합니다.System.exit()노골적으로

메소드명main는 자바 언어의 키워드가 아닙니다.이것은 단순히 자바 런처가 프로그램에 제어권을 전달하기 위해 호출하는 방법의 이름입니다.애플릿과 Enterprise JavaBeans와 같은 관리 환경에서 실행되는 Java 클래스는 다음을 사용하지 않거나 필요로 합니다.main()방법.자바 프로그램은 다음을 가진 여러 클래스를 포함할 수 있습니다.mainmethods. 즉, 어떤 클래스에서 시작할지 VM에 대해 명시적으로 알려야 합니다.

주 메서드는 개체 배열을 허용해야 합니다.관례상 다음과 같이 언급됩니다.args다른 법적 식별자 이름을 사용할 수 있습니다.자바 5 이후, 주요 메소드는 또한 변수 인수를 사용할 수 있는데, 이는 다음과 같은 형태입니다.public static void main(String... args), 기본 메서드를 임의 숫자로 호출할 수 있도록 허용합니다.String논쟁들.이 대체 선언의 효과는 의미론적으로 동일합니다.args매개 변수는 여전히 배열입니다.Stringobjects), 그러나 배열을 만들고 전달하기 위한 대체 구문을 허용합니다.

Java 런처는 지정된 클래스(명령줄에 지정되거나 JAR의 속성으로 지정됨)를 로드하고 시작하여 Java를 시작합니다.public static void main(String[])방법.독립 실행형 프로그램은 이 방법을 명시적으로 선언해야 합니다.String[] args매개 변수는 다음의 배열입니다.String클래스에 전달된 인수를 포함하는 개체입니다.매개 변수는 다음으로main명령행을 통해 전달되는 경우가 많습니다.

인쇄는 자바 표준 라이브러리의 일부입니다.클래스는 이라는 퍼블릭 정적 필드를 정의합니다. 더outobject는 의 예입니다.PrintStreamclass 및 는 전달된 문자열에 새 줄을 추가하는 등 데이터를 표준화할 수 있는 많은 방법을 제공합니다.

끈을"Hello World!"컴파일러에 의해 String 개체로 자동 변환됩니다.

메소드 예제

// 두 개의 슬래시를 사용한 한 줄의 코멘트의 예입니다.  /* * 슬래시와 별표를 사용한 여러 줄 주석의 예입니다. * 이 댓글 유형은 많은 정보를 보유하거나 비활성화하는 데 사용될 수 있습니다. * 코드, 하지만 댓글을 닫는 것을 기억하는 것이 매우 중요합니다. */  꾸러미 섬유질의 모래.;  수입품 java.util.Map; 수입품 자바 util해시맵;  /** * 이것은 자바독 주석의 예입니다; 자바독은 문서를 컴파일할 수 있습니다. * 이 글에서Javadoc 주석은 클래스, 메서드, * 또는 문서화 중인 필드. * @저자 위키백과 자원봉사자 */ 일반의 학급 Fib계산기 확장된 피보나치 기구들 계산기. {     사적인 정적인 지도<정수, 정수> 메모가 있는 = 신규 해시맵<>();      /* * 다음과 같이 작성된 주요 방법은 JVM에서 출발점으로 사용됩니다. * 프로그램을 위해서. */     일반의 정적인 공허한 주된([] 아그스) {         메모가 있는.놓다(1, 1);         메모가 있는.놓다(2, 1);         시스템..나가..인쇄된(피보나치(12)); // 12번째 Fibonacci 번호를 가져와 콘솔에 인쇄합니다.     }      /** * Java로 작성되고 클래스로 래핑되는 메서드의 예입니다. * 음수가 아닌 FIBINDEX가 주어지면, 반환합니다. * N번째 피보나치 수(N은 FIBINDEX)입니다. * * @paramfibIndex Fibonacci 번호의 인덱스 * @피보나치 번호를 반환합니다. */     일반의 정적인 인트 피보나치(인트 fibIndex) {         한다면 (메모가 있는.key 포함(fibIndex)) {             돌아가다 메모가 있는.얻다(fibIndex);         }          인트 정답. = 피보나치(fibIndex - 1) + 피보나치(fibIndex - 2);         메모가 있는.놓다(fibIndex, 정답.);         돌아가다 정답.;     } } 

특별반

애플릿

자바 애플릿은 다른 응용 프로그램에 내장된 프로그램으로, 일반적으로 웹 브라우저에 표시되는 웹 페이지에 있습니다.자바 애플릿 API는 2017년 자바 9 이후 폐지되었습니다.[61][62]

서블릿

자바 서블릿 기술은 웹 개발자들에게 웹 서버의 기능을 확장하고 기존 비즈니스 시스템에 접근하기 위한 간단하고 일관된 메커니즘을 제공합니다.서블릿은 클라이언트의 요청에 대한 응답을 생성하는 서버측 Java EE 구성요소입니다.WebSocket 통신과 같은 기타 표준 서블릿 클래스가 많이 있지만 HTTP 요청에 응답하여 HTML 페이지를 생성하는 경우가 대부분입니다.

자바 서블릿 API는 웹 서비스를 위한 두 가지 표준 자바 기술로 어느 정도 대체되었습니다.

Application Servers 또는 Servlet Containers에서 이러한 API의 일반적인 구현은 실제 비즈니스 로직에 대한 웹 서비스 방법을 위임하는 HTTP 요청 및 응답과의 모든 상호 작용을 처리하기 위한 표준 Servlet을 사용합니다.

Java 서버 페이지

JSP(JavaServer Pages)는 클라이언트HTTP 요청에 대한 응답(일반적으로 HTML 페이지)을 생성하는 서버측 Java EE 구성요소입니다.JSP는 특수 구분 기호를 사용하여 HTML 페이지에 Java 코드를 내장합니다. <%그리고.%>. JSP는 처음 액세스할 때 자체적으로 Java 애플리케이션인 Java 서블릿에 컴파일됩니다.그런 다음 생성된 서블릿이 응답을 생성합니다.[63]

스윙어플리케이션

스윙은 자바 SE 플랫폼을 위한 그래픽 사용자 인터페이스 라이브러리입니다.스윙의 플러그 가능한 룩 앤 시스템을 통해 다른 룩 앤 필을 지정할 수 있습니다.윈도우, GTK+, 모티프의 클론은 썬이 공급합니다.애플은 맥OS에 아쿠아 룩 앤 필(Aqua look and feel for macOS이러한 외관과 느낌의 이전 구현이 부족하다고 여겨졌을 수도 있지만, 스윙 인 자바 SE 6은 기본 플랫폼의 더 네이티브 GUI 위젯 드로잉 루틴을 사용하여 이 문제를 해결합니다.[64]

JavaFX 응용 프로그램

JavaFX는 데스크톱 애플리케이션뿐만 아니라 다양한 기기에서 실행할 수 있는 풍부한 애플리케이션을 만들고 제공하기 위한 소프트웨어 플랫폼입니다.JavaFX는 스윙Java SE의 표준 GUI 라이브러리로 대체하기 위한 것이지만 JDK 11 JavaFX가 핵심 JDK에 포함되지 않고 별도의 모듈에 포함되어 있습니다.[65]JavaFX는 Microsoft Windows, LinuxmacOS에서 데스크톱 컴퓨터 및 웹 브라우저를 지원합니다.JavaFX는 기본 OS 외관과 느낌을 지원하지 않습니다.[66]

제네릭

2004년 J2SE 5.0의 일부로 자바 언어에 제네릭이 추가되었습니다.제네릭이 도입되기 전에는 각 변수 선언이 특정 유형이어야 했습니다.예를 들어 컨테이너 클래스의 경우 특정 유형의 개체만 받아들이는 컨테이너를 쉽게 만들 수 없기 때문에 이 문제가 발생합니다.컨테이너는 클래스 또는 인터페이스의 모든 하위 유형에서 작동합니다. 보통Object, 그렇지 않으면 포함된 클래스마다 다른 컨테이너 클래스를 만들어야 합니다.제네릭은 거의 동일한 코드를 포함하는 컨테이너 클래스를 많이 만들 필요 없이 컴파일 타임 형식 검사를 가능하게 합니다.보다 효율적인 코드를 활성화할 뿐만 아니라 컴파일 시간 오류를 발생시킴으로써 특정 런타임 예외가 발생하지 않도록 합니다.Java가 모든 런타임 유형 오류를 방지한 경우(ClassCastExceptions) 발생하지 않을 경우, 안전한 유형이 될 것입니다.

2016년 자바의 유형 시스템은 제네릭을 사용하여 인스턴스 한 클래스를 관련이 없는 다른 클래스의 변수에 할당할 수 있는 클래스와 방법을 구성할 수 있다는 점에서 불확실한 것으로 입증되었습니다.이러한 코드는 컴파일러에서 승인되지만 런타임에 클래스 캐스트 예외가 발생하여 실패합니다.[67]

비평

자바를 향한 비판에는 제네릭 구현,[68] 속도,[49] 부호 없는 숫자 처리,[69] 부동 소수점 산술 구현,[70] 주 Java VM 구현 HotSpot의 보안 취약성 이력 등이 포함됩니다.[71]

클래스 라이브러리

자바 클래스 라이브러리는 자바의 응용 프로그램 개발을 지원하기 위해 개발된 표준 라이브러리입니다.Java Community Process 프로그램을 통해 Oracle과 협력하여 제어합니다.[72]이 과정에 참여하는 기업이나 개인은 API의 설계와 개발에 영향을 미칠 수 있습니다.이 과정은 2010년대에 논란의 대상이 되어 왔습니다.[73]클래스 라이브러리에는 다음과 같은 기능이 있습니다.

문서화

자바독은 썬 마이크로시스템즈가 만든 종합적인 문서 시스템입니다.이것은 개발자들에게 코드를 문서화하는 체계적인 시스템을 제공합니다.자바독 주석의 맨 앞에 별표가 하나 더 있습니다. 즉, 구분 기호는/**그리고.*/, 자바의 일반적인 여러 줄로 된 주석은 다음과 같이 구분됩니다./*그리고.*/, 그리고 한 줄 댓글은 다음과 같이 시작합니다.//.[78]

구현

Oracle Corporation은 2010년 1월 27일 Sun Microsystems를 인수한 이후 현재 Java SE 플랫폼의 공식 구현을 소유하고 있습니다.이 구현은 Java by Sun의 원래 구현을 기반으로 합니다.Oracle 구현은 Microsoft Windows(현재 공식적으로 지원되는 버전만 있지만 XP에서는 여전히 작동), macOS, LinuxSolaris에서 사용할 수 있습니다.Java에는 Ecma International, ISO/IEC, ANSI 또는 기타 타사 표준 기관에서 인정하는 공식 표준이 없기 때문에 Oracle 구현이 사실상의 표준입니다.

오라클 구현은 두 가지 다른 배포판으로 패키징됩니다.Java 프로그램을 실행하는 데 필요한 Java SE 플랫폼의 일부를 포함하며 최종 사용자를 대상으로 하는 Java Runtime Environment(JRE)와 Java 컴파일러, Javadoc, Jar디버거와 같은 개발 도구를 포함하는 Java Development Kit(JDK).오라클은 고성능 자바 동적 컴파일러이자 인터프리터인 GraalVM도 출시했습니다.

OpenJDK는 GNU GPL로 라이센스가 부여된 또 다른 주목할 만한 Java SE 구현체입니다.이 구현은 Sun이 자바 소스 코드를 GPL로 공개하기 시작하면서 시작되었습니다. 자바 SE 7에서 OpenJDK가 공식적인 자바 레퍼런스 구현입니다.

자바의 목표는 자바의 모든 구현이 호환되도록 하는 것입니다.역사적으로 자바 브랜드 사용에 대한 Sun의 상표 라이센스는 모든 구현이 호환되어야 한다고 주장합니다.이로 인해 Sun은 Microsoft 구현이 Java 원격 메서드 호출(RMI) 또는 Java Native Interface(JNI)를 지원하지 않으며 자체 플랫폼 고유의 기능을 추가했다고 주장하여 Microsoft와 법적 분쟁이 발생했습니다.선은 1997년에 소송을 제기했고 2001년에 2천만 달러의 합의금과 선으로부터 라이선스 조건을 시행하는 법원 명령을 받았습니다.[79]이에 따라 마이크로소프트는 윈도와 함께 자바를 더 이상 출시하지 않습니다.

플랫폼에 구애받지 않는 Java는 Java EE에 필수적이며, 구현을 인증하려면 훨씬 더 엄격한 검증이 필요합니다.이 환경은 휴대용 서버측 애플리케이션을 가능하게 합니다.

Java 플랫폼 외부에서 사용

자바 프로그래밍 언어는 컴파일된 프로그램을 실행하기 위해 소프트웨어 플랫폼의 존재를 요구합니다.

Oracle은 Java와 함께 사용할 Java 플랫폼을 제공합니다.Android SDK는 대체 소프트웨어 플랫폼으로, 자체 GUI 시스템으로 Android 애플리케이션을 개발하는 데 주로 사용됩니다.

안드로이드

자바 언어는 오픈 소스 모바일 운영 체제안드로이드의 핵심 요소입니다.리눅스 커널을 기반으로 만들어진 안드로이드는 대부분 C로 작성되지만, 안드로이드 SDK는 자바 언어를 안드로이드 응용 프로그램의 기본으로 사용하지만 표준 GUI, SE, ME 또는 기타 확립된 자바 표준을 사용하지 않습니다.[80]Android SDK에서 지원하는 바이트코드 언어는 Java 바이트코드와 호환되지 않으며 자체 가상 머신에서 실행되며 스마트폰이나 태블릿 컴퓨터와 같은 저메모리 장치에 최적화되어 있습니다.안드로이드 버전에 따라 바이트 코드는 달빅 가상 머신에 의해 해석되거나 안드로이드 런타임에 의해 네이티브 코드로 컴파일됩니다.

Android SDK는 전체 Java SE 표준 라이브러리를 제공하지 않지만, Android SDK에는 대규모 하위 집합의 독립적인 구현이 포함되어 있습니다.표준 라이브러리(Apache Harmony)와 호환되는 구현을 제공하는 Java 6 및 일부 Java 7 기능을 지원합니다.

논쟁

안드로이드의 자바 관련 기술 사용은 오라클과 구글 간의 법적 분쟁으로 이어졌습니다.2012년 5월 7일, 샌프란시스코 배심원단은 API가 저작권을 가질 수 있다면, 구글이 안드로이드 기기에서 자바를 사용함으로써 오라클의 저작권을 침해했다는 것을 발견했습니다.[81]William Alsup 지방법원 판사는 2012년 5월 31일 API는 저작권을 가질 수 없다고 판결했지만,[82] 이는 2014년 5월 연방순회항소법원에 의해 파기되었습니다.[83]2016년 5월 26일 지방법원은 안드로이드에서 자바 API의 저작권 침해가 공정이용에 해당한다고 판결하면서 구글의 손을 들어줬습니다.[84]이 판결은 2018년 3월 항소법원이 샌프란시스코 연방법원에 손해배상결정 사건을 선고하면서 뒤집혔습니다.[85]구글은 오라클에 유리하게 항소법원이 내린 두 판결에 이의를 제기하기 위해 2019년 1월 미국 연방대법원인증서를 신청했습니다.[86]2021년 4월 5일, 법원은 구글이 자바 API를 사용하는 것은 공정한 사용으로 간주되어야 한다고 6대 2로 판결했습니다.그러나 법원은 API의 저작권성에 대한 판결을 거부했고, 대신 자바의 API가 "순수하게 논쟁을 위해" 저작권이 있다고 간주하여 판결을 결정하기로 결정했습니다.[87]

참고 항목

자바와 다른 언어의 비교

참고문헌

  1. ^ Binstock, Andrew (May 20, 2015). "Java's 20 Years of Innovation". Forbes. Archived from the original on March 14, 2016. Retrieved March 18, 2016.
  2. ^ a b c d Barbara Liskov with John Guttag (2000). Program Development in Java - Abstraction, Specification, and Object-Oriented Design. USA, Addison Wesley. ISBN 9780201657685.
  3. ^ Chaudhary, Harry H. (July 28, 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". Archived from the original on September 29, 2023. Retrieved May 29, 2016.
  4. ^ 자바 5.0은 비슷한 (그리고 경쟁 관계에 있는) C# 언어로 소개된 이후에 몇 가지 새로운 언어 기능(루프, 오토박스, 변수주석대해 향상된 기능)을 추가했습니다.[1]2011년 3월 19일 Wayback Machine에서 보관 [2] 2006년 1월 7일 Wayback Machine에서 보관
  5. ^ Gosling, James; McGilton, Henry (May 1996). "The Java Language Environment". Archived from the original on May 6, 2014. Retrieved May 6, 2014.
  6. ^ Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. "The Java Language Specification, 2nd Edition". Archived from the original on August 5, 2011. Retrieved February 8, 2008.
  7. ^ "The A-Z of Programming Languages: Modula-3". Computerworld.com.au. Archived from the original on January 5, 2009. Retrieved June 9, 2010.
  8. ^ Niklaus Wirth는 2005년 9월 모스크바의 폴리테크닉 박물관에서 열린 강연에서 선 자바 디자인 팀이 자바 출시 몇 년 전에 오베론 컴파일러 소스에 라이선스를 부여하고 이를 검토했다고 언급했습니다.(상대적인) 컴팩트함, 타입 안전성, 가비지 컬렉션, 클래스에 대한 다중 상속 없음 – 이러한 모든 주요 설계 기능은 Java 및 Oberon에서 공유합니다.
  9. ^ 패트릭 노턴(Patrick Noterton)은 자바 프로그래밍 언어의 설계에 강력한 영향을 끼친 것으로 오브제-C를 꼽으며 주목할 만한 직접 파생에는 자바 인터페이스(오브제-C의 프로토콜에서 파생됨)와 원시 래퍼 클래스가 포함된다고 말합니다.[3]2011년 7월 13일 웨이백 머신(Wayback Machine)에서 보관됨
  10. ^ TechMetrix Research (1999). "History of Java" (PDF). Java Application Servers Report. Archived from the original (PDF) on December 29, 2010. The project went ahead under the name green and the language was based on an old model of UCSD Pascal, which makes it possible to generate interpretive code.
  11. ^ "A Conversation with James Gosling – ACM Queue". Queue.acm.org. August 31, 2004. Archived from the original on July 16, 2015. Retrieved June 9, 2010.
  12. ^ The Java Language Team. About Microsoft's "Delegates" (White Paper). JavaSoft, Sun Microsystems, Inc. Archived from the original on June 27, 2012. In the summer of 1996, Sun was designing the precursor to what is now the event model of the AWT and the JavaBeans component architecture. Borland contributed greatly to this process. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs.
  13. ^ "Chapel spec (Acknowledgements)" (PDF). Cray Inc. October 1, 2015. Archived (PDF) from the original on February 5, 2016. Retrieved January 14, 2016.
  14. ^ "Gambas Documentation Introduction". Gambas Website. Archived from the original on October 9, 2017. Retrieved October 9, 2017.
  15. ^ "Facebook Q&A: Hack brings static typing to PHP world". InfoWorld. March 26, 2014. Archived from the original on February 13, 2015. Retrieved January 11, 2015.
  16. ^ "Write once, run anywhere?". Computer Weekly. May 2, 2002. Archived from the original on August 13, 2021. Retrieved July 27, 2009.
  17. ^ a b c "1.2 Design Goals of the Java Programming Language". Oracle. January 1, 1999. Archived from the original on January 23, 2013. Retrieved January 14, 2013.
  18. ^ a b McMillan, Robert (August 1, 2013). "Is Java Losing Its Mojo?". wired.com. Archived from the original on February 15, 2017. Retrieved March 8, 2017. Java is on the wane, at least according to one outfit that keeps on eye on the ever-changing world of computer programming languages. For more than a decade, it has dominated the TIOBE Programming Community Index, and is back on top – a snapshot of software developer enthusiasm that looks at things like internet search results to measure how much buzz different languages have. But lately, Java has been slipping.
  19. ^ Chan, Rosalie (January 22, 2019). "The 10 most popular programming languages, according to the 'Facebook for programmers'". Business Insider. Archived from the original on June 29, 2019. Retrieved June 29, 2019.
  20. ^ "JavaOne 2013 Review: Java Takes on the Internet of Things". www.oracle.com. Archived from the original on April 19, 2016. Retrieved June 19, 2016. 2021년 9월 4일 웨이백 머신에서 보관Alt URL
  21. ^ Byous, Jon (c. 1998). "Java technology: The early years". Sun Developer Network. Sun Microsystems. Archived from the original on April 20, 2005. Retrieved April 22, 2005.
  22. ^ 객체 지향 프로그래밍
  23. ^ Murphy, Kieron (October 4, 1996). "So why did they decide to call it Java?". JavaWorld. Archived from the original on July 13, 2020. Retrieved July 13, 2020.
  24. ^ Kabutz, Heinz; Once Upon a Oak Archived 2007년 4월 13일 Wayback Machine.아티마.2007년 4월 29일 회수.
  25. ^ "JAVASOFT SHIPS JAVA 1.0". Archived from the original on March 10, 2007. Retrieved May 13, 2018.
  26. ^ Object-oriented Programming with Java: Essentials and Applications. Tata McGraw-Hill Education. p. 34.
  27. ^ "JSG – Java Study Group". open-std.org. Archived from the original on August 25, 2006. Retrieved August 2, 2006.
  28. ^ "Why Java Was – Not – Standardized Twice" (PDF). Archived (PDF) from the original on January 13, 2014. Retrieved June 3, 2018.
  29. ^ "What is ECMA—and why Microsoft cares". ZDNet. Archived from the original on May 6, 2014. Retrieved May 6, 2014.
  30. ^ "Java Community Process website". Jcp.org. May 24, 2010. Archived from the original on August 8, 2006. Retrieved June 9, 2010.
  31. ^ "JAVAONE: Sun – The bulk of Java is open sourced". GrnLight.net. Archived from the original on May 27, 2014. Retrieved May 26, 2014.
  32. ^ "Sun's Evolving Role as Java Evangelist". O'Reilly Media. Archived from the original on September 15, 2010. Retrieved August 2, 2009.
  33. ^ "Oracle and Java". oracle.com. Oracle Corporation. Archived from the original on January 31, 2010. Retrieved August 23, 2010. Oracle has been a leading and substantive supporter of Java since its emergence in 1995 and takes on the new role as steward of Java technology with a relentless commitment to fostering a community of participation and transparency.
  34. ^ Gosling, James (April 9, 2010). "Time to move on..." On a New Road. Archived from the original on November 5, 2010. Retrieved November 16, 2011.
  35. ^ Topic, Dalibor. "Moving to a Plugin-Free Web". Archived from the original on March 16, 2016. Retrieved March 15, 2016.
  36. ^ "Learn About Java Technology". Oracle. Archived from the original on November 24, 2011. Retrieved November 21, 2011.
  37. ^ "Why should I uninstall older versions of Java from my system?". Oracle. Archived from the original on February 12, 2018. Retrieved September 24, 2021.
  38. ^ "Oracle Java SE Support Roadmap". Oracle. September 13, 2021. Archived from the original on September 19, 2021. Retrieved September 18, 2021.
  39. ^ "JAVASOFT SHIPS JAVA 1.0". sun.com. Archived from the original on March 10, 2007. Retrieved February 5, 2008.
  40. ^ Chander, Sharat. "Introducing Java SE 11". oracle.com. Archived from the original on September 26, 2018. Retrieved September 26, 2018.
  41. ^ "The Arrival of Java 15!". Oracle. September 15, 2020. Archived from the original on September 16, 2020. Retrieved September 15, 2020.
  42. ^ "JDK 21". openjdk.org. Archived from the original on September 20, 2023. Retrieved September 20, 2023.
  43. ^ "Java Card Overview". Oracle Technology Network. Oracle. Archived from the original on January 7, 2015. Retrieved December 18, 2014.
  44. ^ "Java Platform, Micro Edition (Java ME)". Oracle Technology Network. Oracle. Archived from the original on January 4, 2015. Retrieved December 18, 2014.
  45. ^ "Java SE". Oracle Technology Network. Oracle. Archived from the original on December 24, 2014. Retrieved December 18, 2014.
  46. ^ "Java Platform, Enterprise Edition (Java EE)". Oracle Technology Network. Oracle. Archived from the original on December 17, 2014. Retrieved December 18, 2014.
  47. ^ "Deep Dive Into the New Java JIT Compiler - Graal Baeldung". www.baeldung.com. August 6, 2021. Archived from the original on October 28, 2021. Retrieved October 13, 2021.
  48. ^ "Is the JVM (Java Virtual Machine) platform dependent or platform independent? What is the advantage of using the JVM, and having Java be a translated language?". Programmer Interview. Archived from the original on January 19, 2015. Retrieved January 19, 2015.
  49. ^ a b Jelovic, Dejan. "Why Java will always be slower than C++". Archived from the original on February 11, 2008. Retrieved February 15, 2008.
  50. ^ Hundt, Robert. "Loop Recognition in C++/Java/Go/Scala" (PDF). Archived (PDF) from the original on November 16, 2011. Retrieved July 12, 2012.
  51. ^ "Symantec's Just-In-Time Java Compiler To Be Integrated into Sun JDK 1.1". Archived from the original on June 28, 2010. Retrieved August 1, 2009.
  52. ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (July 22, 2017). "Noc-HMP: A Heterogeneous Multicore Processor for Embedded Systems Designed in SystemJ". ACM Transactions on Design Automation of Electronic Systems. 22 (4): 73. doi:10.1145/3073416. ISSN 1084-4309. S2CID 11150290.
  53. ^ a b c Bloch 2018, p. 26-28, §Item 7: 오래된 객체 참조 제거
  54. ^ "NullPointerException". Oracle. Archived from the original on May 6, 2014. Retrieved May 6, 2014.
  55. ^ "Exceptions in Java". Artima.com. Archived from the original on January 21, 2009. Retrieved August 10, 2010.
  56. ^ "Java HotSpot™ Virtual Machine Performance Enhancements". Oracle.com. Archived from the original on May 29, 2017. Retrieved April 26, 2017.
  57. ^ "Operator Overloading (C# vs Java)". C# for Java Developers. Microsoft. Archived from the original on January 7, 2015. Retrieved December 10, 2014.
  58. ^ "Multiple Inheritance of State, Implementation, and Type". The Java Tutorials. Oracle. Archived from the original on November 9, 2014. Retrieved December 10, 2014.
  59. ^ "Lesson: A Closer Look at the Hello World Application". The Java Tutorials > Getting Started. Oracle Corporation. Archived from the original on March 17, 2011. Retrieved April 14, 2011.
  60. ^ a b Bloch 2018, pp. 73–77, §Item 15 수업 및 구성원의 접근성 최소화
  61. ^ "Deprecated APIs, Features, and Options". Oracle. Archived from the original on June 19, 2019. Retrieved May 31, 2019.
  62. ^ "Applet (Java Platform SE 7)". Docs. Oracle. Archived from the original on August 2, 2020. Retrieved May 1, 2020.
  63. ^ "What Is a JSP Page? - The Java EE 5 Tutorial". docs.oracle.com. Archived from the original on August 2, 2020. Retrieved May 1, 2020.
  64. ^ "Trail: Creating a GUI With JFC/Swing (The Java Tutorials)". docs.oracle.com. Archived from the original on April 29, 2020. Retrieved May 1, 2020.
  65. ^ "Removed from JDK 11, JavaFX 11 arrives as a standalone module". InfoWorld. September 20, 2018. Archived from the original on October 14, 2020. Retrieved October 13, 2020.
  66. ^ "Getting Started with JavaFX: Hello World, JavaFX Style". JavaFX 2 Tutorials and Documentation. Oracle. Archived from the original on August 2, 2020. Retrieved May 1, 2020.
  67. ^ "Java and Scala's Type Systems are Unsound" (PDF). Archived (PDF) from the original on November 28, 2016. Retrieved February 20, 2017.
  68. ^ Arnold, Ken (June 27, 2005). "Generics Considered Harmful". java.net. Archived from the original on October 10, 2007. Retrieved September 10, 2015.
  69. ^ Owens, Sean R. "Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)". Archived from the original on February 20, 2009. Retrieved July 4, 2011.
  70. ^ Kahan, William (March 1, 1998). "How Java's Floating-Point Hurts Everyone Everywhere - ACM 1998 Workshop on Java (Stanford)" (PDF). Electrical Engineering & Computer Science, University of California at Berkeley. Archived (PDF) from the original on September 5, 2012. Retrieved June 4, 2011.
  71. ^ "Have you checked the Java?". Archived from the original on September 21, 2012. Retrieved December 23, 2011.
  72. ^ Cadenhead, Rogers (November 20, 2017), Understanding How Java Programs Work, archived from the original on August 13, 2021, retrieved March 26, 2019
  73. ^ Woolf, Nicky (May 26, 2016). "Google wins six-year legal battle with Oracle over Android code copyright". The Guardian. ISSN 0261-3077. Archived from the original on March 26, 2019. Retrieved March 26, 2019.
  74. ^ a b Bloch 2018, pp. 1-4, §1 소개
  75. ^ "Collections Framework Overview". Java Documentation. Oracle. Archived from the original on December 31, 2014. Retrieved December 18, 2014.
  76. ^ "Java Security Overview". Java Documentation. Oracle. Archived from the original on January 3, 2015. Retrieved December 18, 2014.
  77. ^ "Trail: Internationalization". The Java Tutorials. Oracle. Archived from the original on December 31, 2014. Retrieved December 18, 2014.
  78. ^ "How to Write Doc Comments for the Javadoc Tool". Oracle Technology Network. Oracle. Archived from the original on December 18, 2014. Retrieved December 18, 2014.
  79. ^ Niccolai, James (January 24, 2001). "Sun, Microsoft settle Java lawsuit". JavaWorld. IDG News Service. Archived from the original on July 14, 2020. Retrieved July 13, 2020.
  80. ^ van Gurp, Jilles (November 13, 2007). "Google Android: Initial Impressions and Criticism". Javalobby. Archived from the original on August 28, 2008. Retrieved March 7, 2009. Frankly, I don't understand why Google intends to ignore the vast amount of existing implementation out there. It seems like a bad case of "not invented here" to me. Ultimately, this will slow adoption. There are already too many Java platforms for the mobile world and this is yet another one
  81. ^ Mullin, Joe (May 7, 2012). "Google guilty of infringement in Oracle trial; future legal headaches loom". Law & Disorder. Ars Technica. Archived from the original on May 8, 2012. Retrieved May 8, 2012.
  82. ^ Mullin, Joe (May 31, 2012). "Google wins crucial API ruling, Oracle's case decimated". Ars Technica. Archived from the original on March 12, 2017. Retrieved June 1, 2012.
  83. ^ Rosenblatt, Seth (May 9, 2014). "Court sides with Oracle over Android in Java patent appeal". CNET. Archived from the original on May 10, 2014. Retrieved May 10, 2014.
  84. ^ Mullin, Joe (May 26, 2016). "Google beats Oracle—Android makes "fair use" of Java APIs". Ars Technica. Archived from the original on January 20, 2017. Retrieved May 26, 2016.
  85. ^ Farivar, Cyrus (March 27, 2018). ""Google's use of the Java API packages was not fair," appeals court rules". Ars Technica. Archived from the original on September 24, 2019. Retrieved August 6, 2019.
  86. ^ Lee, Timothy (April 23, 2019). "Google asks Supreme Court to overrule disastrous ruling on API copyrights". Ars Technica. Archived from the original on April 23, 2019. Retrieved April 23, 2019.
  87. ^ "Google LLC v. Oracle America, Inc 593 U. S. ____ (2021)" (PDF). Archived (PDF) from the original on April 5, 2021. Retrieved April 6, 2021.

인용작품

외부 링크