SuplexHold (토론 | 기여) (→느린 속도) |
SuplexHold (토론 | 기여) (설계원칙 추가, 객체지향 관련내용 수정) |
||
1번째 줄: | 1번째 줄: | ||
[[File:Java logo and wordmark.svg|right|200px]] | [[File:Java logo and wordmark.svg|right|200px]] | ||
[[분류: 컴퓨터 프로그래밍]] | [[분류: 컴퓨터 프로그래밍]] | ||
'''Java'''는 썬 마이크로시스템즈(현재 오라클에 합병)에서 개발한 다중 플랫폼 | '''Java'''는 썬 마이크로시스템즈(현재 오라클에 합병)에서 개발한 다중 플랫폼 객체지향 프로그래밍 언어이다. | ||
== 설계 목표 == | |||
Java 는 다음과 같은 목표를 따라 설계되고 구현되었다.<ref name="design_goals"> | |||
[http://www.oracle.com/technetwork/java/intro-141325.html 1.2 Design Goals of the Java™ Programming Language], Oracle, 1999, 조회일 2015-04-20 | |||
</ref> | |||
* Simple, Object-oriented and Familiar | |||
* Robust and Secure | |||
* Architecture Neutral and Portable | |||
* High Performance | |||
* Interpreted, Threaded, and Dynamic | |||
== 특징 == | == 특징 == | ||
=== 가상머신 === | === 가상머신 === | ||
일반적인 컴파일을 거치는 언어와 다르게, Java는 우선 컴파일러에서 바이트 코드라는 가상머신을 위한 이진 코드로 컴파일한다. 그후 자바 프로그램이 실행될 때, 가상머신에서 인터프리터 방식으로 이를 해석하여 실행 플랫폼에 맞는 기계어로 변환한다. 이로서 다중 플랫폼을 구현하였다. | |||
=== 객체지향 === | === 객체지향 === | ||
설계 목표에 따라 Java는 객체지향으로 구현되었다. 객체의 설계를 담고 있는 클래스를 작성하고, 이를 실제로 사용할 때는 클래스에 기반한 객체를 만들어서 사용한다. C++ 와 다르게 Java의 상속은 다중 상속이 아니다. Java 의 상속은 단 하나의 부모(Parent) 클래스만을 허용한다. 대신 인터페이스를 도입하여 C++ 의 다중 상속이 가지고 있는 복잡성과 문제 발생 가능성을 줄이고 보다 쓰기 쉬운 형태로 구현되었다. | |||
=== 가비지 컬렉션(GC) === | === 가비지 컬렉션(GC) === | ||
자바는 프로그래머에게 | 자바는 프로그래머에게 메모리 관리를 맡기지 않는다. 프로그래머가 생성하고, 이를 직접 해제하는게 아니라, 가상머신에서 프로그램을 잠시 멈춘후 사용하지 않는 객체를 제거한다. 이는 프로그래머의 수고를 덜어주었지만, 반대로 중간에 프로그램이 멈춰서 사용자의 불만을 초래하기도 한다. | ||
== 장점 == | == 장점 == | ||
=== 안정성 === | === 안정성 === | ||
19번째 줄: | 30번째 줄: | ||
== 단점 == | == 단점 == | ||
=== 느린 속도 === | === 느린 속도 === | ||
[[C (프로그래밍 언어)|C]]같은 언어들은 기계어로 번역해서 바로 실행할 수 있는데, 바이트코드는 인터프리터를 거쳐서 실행되는 방식이기 때문에 기계어로 컴파일되어 실행되는 언어에 비해 느릴 수 밖에 없다. 그러나 JIT 등의 기술을 도입해 실행속도를 향상시키려는 노력이 꾸준히 진행되었으며, 같은 로직을 수행하는 코드를 실행했을 때 필요한 시간은 C++ 대비 평균적으로 2배 정도까지 따라잡았다. 물론 일반적인 인터프리터 언어 대비 실행 속도는 당연히 훨씬 빠르다. | [[C (프로그래밍 언어)|C]]같은 언어들은 기계어로 번역해서 바로 실행할 수 있는데, 바이트코드는 인터프리터를 거쳐서 실행되는 방식이기 때문에 기계어로 컴파일되어 실행되는 언어에 비해 느릴 수 밖에 없다. 그러나 JIT, HotSpot 등의 기술을 도입해 실행속도를 향상시키려는 노력이 꾸준히 진행되었으며, 같은 로직을 수행하는 코드를 실행했을 때 필요한 시간은 C++ 대비 평균적으로 2배 정도까지 따라잡았다. 물론 일반적인 인터프리터 언어 대비 실행 속도는 당연히 훨씬 빠르다. | ||
=== 불편한 예외처리 === | === 불편한 예외처리 === |
2015년 4월 21일 (화) 21:25 판
Java는 썬 마이크로시스템즈(현재 오라클에 합병)에서 개발한 다중 플랫폼 객체지향 프로그래밍 언어이다.
설계 목표
Java 는 다음과 같은 목표를 따라 설계되고 구현되었다.[1]
- Simple, Object-oriented and Familiar
- Robust and Secure
- Architecture Neutral and Portable
- High Performance
- Interpreted, Threaded, and Dynamic
특징
가상머신
일반적인 컴파일을 거치는 언어와 다르게, Java는 우선 컴파일러에서 바이트 코드라는 가상머신을 위한 이진 코드로 컴파일한다. 그후 자바 프로그램이 실행될 때, 가상머신에서 인터프리터 방식으로 이를 해석하여 실행 플랫폼에 맞는 기계어로 변환한다. 이로서 다중 플랫폼을 구현하였다.
객체지향
설계 목표에 따라 Java는 객체지향으로 구현되었다. 객체의 설계를 담고 있는 클래스를 작성하고, 이를 실제로 사용할 때는 클래스에 기반한 객체를 만들어서 사용한다. C++ 와 다르게 Java의 상속은 다중 상속이 아니다. Java 의 상속은 단 하나의 부모(Parent) 클래스만을 허용한다. 대신 인터페이스를 도입하여 C++ 의 다중 상속이 가지고 있는 복잡성과 문제 발생 가능성을 줄이고 보다 쓰기 쉬운 형태로 구현되었다.
가비지 컬렉션(GC)
자바는 프로그래머에게 메모리 관리를 맡기지 않는다. 프로그래머가 생성하고, 이를 직접 해제하는게 아니라, 가상머신에서 프로그램을 잠시 멈춘후 사용하지 않는 객체를 제거한다. 이는 프로그래머의 수고를 덜어주었지만, 반대로 중간에 프로그램이 멈춰서 사용자의 불만을 초래하기도 한다.
장점
안정성
가상머신 위에서 돌기 떄문에 자바로 만들어신 프로그램은 절대 컴퓨터와 같이 저승으로 승천하지 않는다.
다양한 라이브러리
기본적으로 다중플랫폼을 위하여 프로그램 제작에 필요한 대부분'의 클래스및 라이브러리가 기본적으로 들어가 있다성능이나 외관은 둘째치고...
다중 플랫폼
인터프리터로 처리되는 자바의 특성상 다중 플랫폼을 지원한다. 현재 자바 인터프리터가 있는 OS 플랫폼은 윈도우, OS X, 우분투, 페도라 및 그 외 리눅스와 유닉스 계열[2], 심지어 블랙베리, 피처폰, 그외 임베디드 플랫폼에서도 자바를 사용할 수 있다.[3]
단점
느린 속도
C같은 언어들은 기계어로 번역해서 바로 실행할 수 있는데, 바이트코드는 인터프리터를 거쳐서 실행되는 방식이기 때문에 기계어로 컴파일되어 실행되는 언어에 비해 느릴 수 밖에 없다. 그러나 JIT, HotSpot 등의 기술을 도입해 실행속도를 향상시키려는 노력이 꾸준히 진행되었으며, 같은 로직을 수행하는 코드를 실행했을 때 필요한 시간은 C++ 대비 평균적으로 2배 정도까지 따라잡았다. 물론 일반적인 인터프리터 언어 대비 실행 속도는 당연히 훨씬 빠르다.
불편한 예외처리
사실 제일 불편한 게 이거라 카더라
자바에서 예외는 일단 막고 봐야 한다. 다른 언어에선 필요한 경우 예외처리를 한다면, 자바는 예외 처리를 하고 필요한 경우 조치를 취한다고 생각하면 된다.[4] 안 그러면 컴파일러가 "이거이거 예외처리 해야됨" 하고 오류를 내뿜는다. 그래서 보통 자바코드에선 try-catch 문을[5] 굉장히 빈번하게 볼 수 있다.
주석
<references>