Java: 두 판 사이의 차이

(설계원칙 추가, 객체지향 관련내용 수정)
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는 객체지향으로 구현되었다. 객체의 설계를 담고 있는 클래스를 작성하고, 이를 실제로 사용할 때는 클래스에 기반한 객체를 만들어서 사용한다. 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>

  1. 1.2 Design Goals of the Java™ Programming Language, Oracle, 1999, 조회일 2015-04-20
  2. 안드로이드는 자바를 사용하긴 하나 사정이 다른데 그 이유는 안드로이드는 달빅 바이트코드를 사용하기 때문에 자바 바이트코드를 실행할 수 없다.
  3. 애초에 자바의 목적이 가전제품에서 돌아갈 수 있도록 하는 것이었다고 한다.
  4. 일부 RuntimeException의 경우 제외 왜 RuntimeException만 제외인건데
  5. 예외처리를 할 때 사용하는 코드이다.