자바 (프로그래밍 언어): 두 판 사이의 차이
내용 삭제됨 내용 추가됨
편집 요약 없음 |
잔글 211.46.130.7(토론)의 편집을 Ykhwong의 마지막 판으로 되돌림 |
||
1번째 줄:
{{소프트웨어 정보
|이름 =
|로고 =
|화면 =
|설명 =
|개발자 = [[오라클 (기업)|오라클]]
|발표일 =
|최근 버전 = Java Standard Edition
|최근 버전 출시일 = {{출시일|2016|04|19}}
|미리보기 버전 = Java Standard Edition 9 9 Early Access b102 (1.9.0-ea-b102)
|미리보기 버전 출시일 = {{출시일|2016|01|21}}
|운영체제 = [[크로스
|플랫폼 =
|종류 = [[
|라이선스 = [[GNU 일반 공중 사용 허가서|GNU General Public License]] / [[자바 커뮤니티 프로세스|Java Community Process]]
|웹사이트 = {{언어고리|en}} [http://www.oracle.com/technetwork/java/ For Java Developers]
18번째 줄:
'''자바'''({{llang|en|Java}}, {{문화어|쟈바}})는 [[썬 마이크로시스템즈]]의 [[제임스 고슬링]]({{lang|en|James Gosling}})과 다른 연구원들이 개발한 [[객체 지향 프로그래밍|객체 지향적]] [[프로그래밍 언어]]이며, [[썬 마이크로시스템즈]]에서 무료로 제공하고 있다. [[1991년]] 그린 프로젝트({{lang|en|Green Project}})라는 이름으로 시작해 [[1995년]]에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발했지만 현재 [[웹 애플리케이션]] 개발에 가장 많이 사용하는 언어 가운데 하나이고, 모바일 기기용 소프트웨어 개발에도 널리 사용하고 있다. 현재 버전 9까지 출시했다.
자바의
== 역사 ==
자바 언어는
[[썬
2006년 11월 13일 [[썬 마이크로시스템즈]]는 대부분은자바를 [[GPL]] 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. [[썬 마이크로시스템즈]]가권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다. 2009년 4월 20일 제작사인 [[썬 마이크로시스템즈]] [[오라클 (기업)|오라클]]과 인수합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다▼
▲2006년 11월 13일 [[썬 마이크로시스템즈]]는
== 철학 =▼
자바 는 다음 5가지의 핵심 목표를 지니고 있다.{{출처|날짜=2007-1-24}}▼
▲== 철학 ==
# [[객체 지향]] 방법론을 사용해야 한다▼
▲# [[객체 지향]] 방법론을 사용해야 한다.
# 같은 프로그램([[바이트코드]])이 여러 [[운영 체제]]([[마이크로프로세서]])에서 실행될 수 있어야 한다.
# 컴퓨터 [[네트워크]] 접근 기능이
# 원격 코드를 안전하게 실행할 수
# 다른 객체 지향 언어들의 좋은
자바는 초기 설계부터 객체 지향 언어([[객체 지향 프로그래밍]])로 설계되었다. [[C (프로그래밍 언어)|C]]가 [[C++]]로 진화한 것과는 차이가 있다. 그리고 같은 코드로 어떤 [[
== 자바 실행 코드 생성 및 마이크로프로세서와 관계 =▼
[[파일:Java virtual machine architecture.svg|thumb400px|JVM 구조. 소스코드는 바이트코드로 컴파일되어 생성, 코드 검증, JVM에 의해 해석되어 실행(interpreted)또는 JIT-compiled로 직접 기계어 코드로 변환 실행. JRE(Java Runtime Environment)에 API와 JVM이 함께 만들어짐.]▼
▲== 자바 실행 코드 생성 및 마이크로프로세서와 관계 ==
자바가 여러 개의 [[마이크로프로세서]](CPU)에서 같은 코드가 실행되기 위해서는 C/C++의 프로그램의 실행 구조와는 다른 방식이 필요하다. C/C++가 특정 CPU의 기어 코드를 직접 생성하면, 이 기계어 코드가 메모리에 적체되어 바로 실행된다. 따라서 C/C++은 CPU가 달라지면컴파일러가 달라져야 한다. 임베디드 프로그램의 경우, gcc는 gcc 소스를 사용해서 특정 CPU를 지정하고, 컴파러(x86 플랫폼에서)로 [[크로스 컴파일러]]를 만들 수 있다. x86 리눅스용 프로그램 만든다면, x86 컴파일러를 들 수 있다. ARM용 프로그램이라면 ARM을 지정하고 컴파일러 소스를 컴파일러(x86에서 실행되는)로 ARM용 크로스 파일러를 만들 수 있다. 만약 gcc을 사용하고 싶지 않거나 gcc 컴파일러가 없다면,특정 CPU 개발 도구는 구입을해서 사용한다. 그러나 자바는 같은 코드를 사용하여 다른 CPU에서 실행되도록 하기 위해 직접 CPU의 기계어 코를 생성해서는 안 된다. 그 대신 자바는 [[바이트코드]]([[:en:Java bytecode|Java bytecode]])라는 것을 생한다. 이것을 [[자바 가상 머신]](JVM, [[:en:Java virtual machine|Java virtual machine]])이 해석을 하여 실한다. 자바 가상 머신이 [[인터프리터]]가 되어 코드 해석 방식의 실행을 함으로써, 같은 바이트코드를 가지고 러 가지의 CPU에서 실행이 가능해진다. JVM은 CPU와 직접적 관계가 있으므로 이것은 CPU의 기계어 코드로 이루진다.▼
▲[[파일:Java virtual machine architecture.svg|
=== 자바 실행 모델과 [[자바 바이트드]]의 예 ===▼
자바의 실행 방식은 스택 실행 방식 언어([[:en:sack-oriented programming language|stack-oriented programming language]])를 생각할 수 있다▼
▲자바가 여러 개의 [[마이크로프로세서]](CPU)에서 같은 코드가 실행되기 위해서는 C/C++의 프로그램의 실행 구조와는 다른 방식이 필요하다. C/C++가 특정 CPU의
<source lang="c"▼
int main(▼
int a = 10; int b = 20;▼
int c▼
▲자바의 실행 방식은 스택 실행 방식 언어([[:en:
c =a + b;▼
prntf("%d", c);▼
▲<source lang="c">
/ ...▼
▲int main()
</source>이것을 C/C++를 [[x86|x86 프로세서]]용 [[컴파일러]]로 컴파일하면, 컴파일러와 최적화 등에 따라 다를 수 있지 다음과 같은 예의 코드가 생성될 수 있다. C 언어에서 실행할 때, 지역변수는 [[스택]]이나 CPU의 [[레지스터]] 이용한다. 스택이냐 레지스터냐는 개발 도구의 옵션에서 설정하는 최적화와 함수 내의 변수의 숫자와 관련이 있. 함수의 블럭이 시작되면 레지스터를 스택에 대피시키고, EBP를 스택의 포인터 값으로 설정하여 변수의 베이스주소로 사용한다. 스택을 이용한다면 다음과 같은 어셈블리 결과를 생각할 수 있다.▼
{
[[x86|x86 프로세서]]에서 [[어셈블리어]] 코드 예는 ▼
<source lang="asm"▼
int b = 20;
▲ int c;
▲ c = a + b;
▲ // ...
}
</source>
▲
▲[[x86|x86 프로세서]]에서 [[어셈블리어]] 코드 예는 :
▲<source lang="asm">
mov eax, DWORD PTR 4[ebp]
mov edx, DWORD
add eax,
mov DWORD
</source>
이
그러나 자바에서 보면 ▼
▲그러나 자바에서 보면 :
2 iad▼
0 iload_1
1 iload_2
2개의 숫를 더하기 위해 스택에 넣고, 다시 스택에서 꺼내서 더한다. 더한 값을 다시 스택에 넣는다.▼
이 코드는 특정 CPU의 기계어 코드가 아니라, 자바 고유의 기계어로 생각할 수 있는 코드 형태이다.JVM이 읽어 해석한 후, 해당 코드의 기능을 수행한다▼
3 istore_3
== 버전 =▼
자바의 전은 보통 Java SE 또는 JDK/JRE의 버전으로 말한다.▼
▲이 코드는 특정 CPU의 기계어 코드가 아니라, 자바 고유의 기계어로 생각할 수 있는 코드 형태이다. JVM이 읽어 해석한 후, 해당 코드의 기능을 수행한다.
▲== 버전 ==
JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 [[API]]가 바뀐다. 초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)으로 변경되었다. <ref>[http://java.sun.com/javase/namechange.html Java SE Naming and Versions]</ref>
|